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.