Skip to content

Deel ​

Deel is a global workforce platform for contracts, HR, payroll, expenses, time off, recruiting, immigration, and IT operations.

Bruin supports Deel as a source for Ingestr assets, and you can use it to ingest data from Deel into your data platform through the Deel REST API.

To set up a Deel connection, you must add a configuration item in the .bruin.yml and asset file. You need a Deel organization API token, which you can create in the Deel UI under Organization Settings → Developer → API tokens. Give the token the read scopes required by the tables you plan to ingest.

Follow the steps below to set up Deel correctly as a data source and run ingestion.

Configuration ​

Step 1: Add a connection to the .bruin.yml file ​

yaml
connections:
    deel:
        - name: "deel"
          api_key: "your_api_key"
  • api_key (required): A Deel organization API token, sent as a bearer token. The token must carry the read scopes needed by the tables you plan to ingest.
  • environment (optional): Which Deel environment to reach, production or sandbox. Defaults to production. Sandbox tokens are separate from production tokens.

Step 2: Create an asset file for data ingestion ​

To ingest data from Deel, you need to create an asset configuration file. This file defines the data flow from the source to the destination. Create a YAML file (e.g., deel_ingestion.yml) inside the assets folder and add the following content:

yaml
name: public.deel
type: ingestr

parameters:
  source_connection: deel
  source_table: 'people'

  destination: postgres
  • name: The name of the asset.
  • type: Specifies the asset's type. Set this to ingestr to use the ingestr data pipeline. For Deel, it will always be ingestr.
  • source_connection: The name of the Deel connection defined in .bruin.yml.
  • source_table: The name of the table in Deel to ingest. See the available tables below.
  • destination: The destination platform/type, for example postgres.

Step 3: Run asset to ingest data ​

bash
bruin run assets/deel_ingestion.yml

As a result of this command, Bruin will ingest data from the given Deel table into your Postgres database.

Available Source Tables ​

Deel exposes a large catalog of tables grouped by domain. Nested Deel objects and arrays are preserved as JSON columns. Tables whose names start with contract_, people_, person_, eor_, legal_entity_, payroll_, or gp_ may make one request per matching parent record, so they can be slower to load.

Organization and workforce ​

TablePrimary KeyStrategyDetails
organizationsidreplaceCurrent organization
legal_entitiesidmergeLegal entities, including archived entities and payroll settings
peopleidmergeOrganization-wide people directory and employment summaries
people_detailsidmergeFull profile for every person, including custom fields and worker relations
people_personalperson_idreplacePersonal information for every accessible person
people_positionsperson_id, idreplaceHRIS positions for every person
people_worker_relationsperson_id, idreplaceWorker relationships for every person
person_custom_field_valuesperson_id, idreplaceCustom-field values for every person
people_custom_fieldsidreplacePeople custom-field definitions
departmentsidreplaceDepartments
teamsidreplaceTeams
groupsidmergeGroups, including archived groups
rolesidreplaceOrganization roles
working_locationsidreplaceWorking locations
managersidreplaceManagers
onboardingunique_idreplaceOnboarding tracker records
offboardingunique_idreplaceOffboarding tracker records
organization_tasksidreplaceOrganization tasks
organization_structuresidreplaceHRIS organization structures
worker_relation_typesidreplaceWorker-relation type definitions
industriesidmergeIndustry subcategories

Contract, time, payroll, and accounting ​

TablePrimary KeyStrategyDetails
contractsidreplaceContract summaries and cost centers
contract_detailsidmergeFull details for every contract
contract_templatesidreplaceContract templates
contract_termination_reasonsidmergeContract termination reasons
contract_custom_fieldsidreplaceContract custom-field definitions
contract_custom_field_valuescontract_id, idreplaceCustom-field values for every contract
contract_adjustmentsidmergeAdjustments for every contract
contract_amendmentsidmergeAmendments for every contract
contract_ic_invoicing_taxescontract_idreplaceIndependent-contractor invoicing taxes
contract_milestonesidreplaceMilestones for milestone contracts
contract_off_cycle_paymentsidreplaceContractor off-cycle payments
contract_payment_cyclescontract_id, idreplaceContractor payment cycles
contract_taskscontract_id, idreplaceContractor tasks
eor_benefitscontract_id, idreplaceBenefits for EOR contracts
eor_amendmentsidmergeAmendments for EOR contracts
eor_documentscontract_id, document_typereplaceDocuments for EOR contracts
timesheetsidmergeTimesheets
hourly_report_root_presetsidreplaceHourly-report root presets
adjustment_categoriesidreplaceAdjustment categories
invoice_adjustmentsidmergeInvoice adjustments
invoicesidmergeOrganization invoices
deel_invoicesidreplaceDeel fee invoices
paymentsidmergePayment receipts
refund_statementsidmergeRefund statements
time_offsidmergeTime-off requests, including deleted requests
shift_ratesexternal_idmergeTime-tracking shift rates
shiftsexternal_idmergeTime-tracking shifts
legal_entity_cost_centersidmergeCost centers for every legal entity
payroll_cyclesidmergePayroll cycles for every legal entity
gross_to_net_reportspayroll_cycle_id, contract_oidmergeGross-to-net records for payroll cycles
gp_payroll_eventsidreplaceGlobal Payroll events for every legal entity
gp_gross_to_net_reportspayroll_event_id, contractIdmergeGlobal Payroll gross-to-net records

Recruiting, IT, immigration, and webhooks ​

TablePrimary KeyStrategyDetails
ats_application_sourcesidmergeATS application sources
ats_applicationsidreplaceATS applications
ats_candidatesidmergeATS candidates
ats_departmentsidmergeATS departments
ats_employment_typesidmergeATS employment types
ats_hiring_membersidmergeATS hiring members
ats_job_boardsidmergeATS job boards
ats_jobsidmergeATS jobs
ats_locationsidmergeATS locations
ats_offersidmergeATS offers
ats_candidate_archivation_reasonsidreplaceCandidate archivation reasons
ats_offer_rejection_reasonsidreplaceOffer rejection reasons
ats_job_closure_reasonsidreplaceJob closure reasons
ats_email_templatesidmergePublished ATS email templates
ats_interviewsidmergeATS interviews
ats_job_postingsidmergeATS job postings
ats_openingsidmergeATS job openings
ats_tagsidmergeATS candidate tags
ats_teamsidmergeATS teams
it_assetsidmergeDeel IT assets
it_ordersidmergeDeel IT orders
it_policiesidreplaceDeel IT hardware policies
immigration_casesidmergeClient immigration cases
webhooksidreplaceConfigured webhooks
webhook_event_typesidmergeAvailable webhook event types

Lookup ​

TablePrimary KeyStrategyDetails
countriescodereplaceSupported countries and country capabilities
currenciescodereplaceSupported currencies
job_titlesidreplaceJob titles
senioritiesidreplaceSeniority levels
time_off_typesnamereplaceTime-off type names

Feature-specific tables return an API error when the corresponding Deel product or token scope is not enabled for the organization.

Personal data ​

Many Deel tables contain sensitive personal, employment, and payroll information. Deel returns only the fields and resources allowed by the token's scopes and sensitive-data settings. Treat the destination tables as containing personal data.