Enrich new Attio contacts with FullEnrich

Enrich new Attio contacts with FullEnrich

Clay

Automatically enrich every new Attio contact with verified emails, phone numbers, and LinkedIn profiles using FullEnrich, then update the record with the enriched data.

Automatically enrich every new Attio contact with verified emails, phone numbers, and LinkedIn profiles using FullEnrich, then update the record with the enriched data.

Zapier

What this Zap does: When a new contact is added to an Attio list, FullEnrich finds the contact's verified email and phone number, then updates the same Attio record with the enriched data. The Zap uses 3 steps: Attio List Entry CreatedFullEnrich Enrich ContactAttio Update List Entry.

Use this Zap

1. Prepare your Attio list

Make sure your Attio list has the following attributes on the person record:

  • First Name

  • Last Name

  • Company Name

  • Company Domain (optional, improves match rates)

  • LinkedIn URL (optional)

  • Email (will be filled by FullEnrich)

  • Phone (will be filled by FullEnrich)

2. Open the Zap template

Click the Use this Zap button above to open the template in Zapier. The Zap contains 3 pre-configured steps:

  • Trigger: Attio - List Entry Created (instant)

  • Action 1: FullEnrich - Enrich Contact

  • Action 2: Attio - Update List Entry

3. Configure the Attio trigger

Click on the first step (List Entry Created). Connect your Attio account, then select the List you want to monitor. This is an instant trigger — the Zap fires immediately when a new entry is added to the list, with no polling delay.

4. Connect your FullEnrich account

Click on the second step (Enrich Contact). Connect your FullEnrich account using your API key. Map the following fields from the Attio trigger:

  • Name of Your Enrichment → e.g. Attio

  • First Name → First Name from Attio

  • Last Name → Last Name from Attio

  • Company Name → Company Name from Attio

  • Domain of the company → Company Domain from Attio

  • Enrich with → Emails + Phones

5. Configure the Update List Entry step

Click on the third step (Update List Entry). Select the same List as the trigger. Map the following fields:

  • Entry ID → Entry ID from the Attio trigger step

  • Email → Most Probable Email from FullEnrich

  • Phone → Most Probable Phone from FullEnrich

6. Test and turn on

Click Test step on each step to verify everything works — make sure at least one entry exists in your Attio list. Check that the Email and Phone fields get updated correctly. Once confirmed, click Publish to turn the Zap on. Every new list entry will now be automatically enriched.

Note: This trigger is instant — unlike polling-based triggers, the Zap fires immediately when a new entry is added to your Attio list. No delay.

Problem

Solution

FullEnrich returns no email

Make sure First Name, Last Name, and Company Name are mapped correctly. Adding the Company Domain improves match rates.

Attio update fails

Check that the Entry ID is mapped from the trigger step, and that the Email and Phone attributes exist on the record.

Zap doesn't fire

Make sure the Zap is published and that you're adding entries to the correct list. Test by adding a new entry manually.

Duplicate enrichments

Zapier tracks which entries it has already processed. If you see duplicates, check that you don't have multiple Zaps running on the same list.

Make

What this scenario does: When a new contact is created in Attio, the scenario instantly fetches the person's details, sends them to FullEnrich for enrichment, then updates the Attio record with the verified email and phone number.

4 modules: Watch Entries → Get a Person → FullEnrich Enrich → Assert a Person

Get template

1. Watch Entries (instant trigger)

Go to make.com and click Create a new scenario. Add the first module: search for Attio and select Watch Entries. Connect your Attio account. This is an instant webhook-based trigger — the scenario runs immediately when a new entry is created in Attio, with no polling delay.

2. Get a Person

Add a second module: Attio → Get a Person. Map the Person ID to {{1.id.entry_id}} from the Watch Entries trigger. This fetches the full person record (First Name, Last Name, Company) needed for enrichment.

3. FullEnrich - Enrich

Add a third module: FullEnrich → Enrich. Connect your FullEnrich API key. Map the fields from the Get a Person module:

  • First Name → {{3.values.name[].first_name}}

  • Last Name → {{3.values.name[].last_name}}

  • Company Name → {{3.values.company[].active_from}}

Under Enrich with, select Emails and Phones.

4. Assert a Person (update the record)

Add a fourth module: Attio → Assert a Person. Set the Matching Attribute to the Record ID from the Get a Person module ({{3.id.record_id}}). Then map the enriched data:

  • Email addresses → {{2.email}} (Most Probable Email from FullEnrich)

  • Phone numbers → {{2.datas[].contact.most_probable_phone}}

5. Test and activate

Click Run once to test, then create a new contact in Attio. Check that the Email and Phone fields have been updated on the record. Once confirmed, toggle the scenario ON. Since the trigger is instant (webhook), new contacts will be enriched in real time.

Problem

Solution

FullEnrich returns no email

Make sure the Get a Person module is returning First Name, Last Name, and Company correctly. Check that the Person ID mapping uses {{1.id.entry_id}}.

Assert a Person fails

Check that the Matching Attribute is set to the Record ID from Get a Person ({{3.id.record_id}}), and that the Email and Phone attributes exist on your Attio People object.

Scenario doesn't trigger

Make sure the webhook is active in Attio. Go to the Watch Entries module and verify the webhook is properly connected. Try re-creating the webhook if needed.

n8n

What this workflow does: When a new entry is added to an Attio list, the workflow fetches the person and company details, sends them to FullEnrich for enrichment, then updates the Attio record with verified email and phone. Uses two parallel flows because FullEnrich works asynchronously.

Top flow (4 nodes): Attio Webhook → Get Person → Get Company → FullEnrich Enrich
Bottom flow (2 nodes): FullEnrich Callback Webhook → Update Person

Copy template url

Setup required: Before starting, create an Attio API token (Settings → Developers) and add it as a "Header Auth" credential in n8n (Authorization: Bearer YOUR_TOKEN). Then connect your FullEnrich credentials.

1. Import the workflow

Click Copy Template URL above. In n8n, go to Workflows → Add Workflow, click the ... menu in the top-right and select Import from URL. Paste the URL and click Import.

2. Attio Webhook (trigger)

Open the Attio Webhook node. Set the HTTP method to POST and the path to attio-new-entry. Then go to Attio → Settings → Webhooks, create a new webhook for the event list.entry.created, and paste this node's production URL. The workflow will trigger instantly when a new entry is added to a list.

3. Attio - Get Person (HTTP Request)

Add an HTTP Request node. Set the URL to:

  • https://api.attio.com/v2/objects/people/records/{{ $json.body.events[0].parent_record_id }}

Set Authentication to Generic Credential Type → Header Auth (your Attio API token). This fetches the full person record (name, company reference) from the webhook's record ID.

4. Attio - Get Company (HTTP Request)

Add another HTTP Request node. Set the URL to:

  • https://api.attio.com/v2/objects/companies/records/{{ $json.data.values.company[0].target_record_id }}

Use the same Header Auth credential. This fetches the company record to get the domain and company name for enrichment.

5. FullEnrich - Enrich Contact

Add a FullEnrich node. Connect your API key and map the fields:

  • Enrichment Name → Attio New Entry

  • First Name → {{ $('Attio - Get Person').item.json.data.values.name[0].first_name }}

  • Last Name → {{ $('Attio - Get Person').item.json.data.values.name[0].last_name }}

  • Company Domain → {{ $json.data.values.domains[0].domain }}

  • Company Name → {{ $json.data.values.name[0].value }}

  • Webhook URL → production URL of the callback webhook (Step 6)

Add a Custom Field with key id and value {{ $('Attio Webhook').item.json.body.events[0].parent_record_id }} — this passes the Attio record ID through to the callback.

6. FullEnrich Callback Webhook (bottom flow)

Open the FullEnrich Callback Webhook node (bottom flow). It's set to HTTP method POST with the path attio-fullenrich-callback. Copy this node's production URL and paste it in the FullEnrich node's Webhook URL field (Step 5).

7. Attio - Update Person (HTTP Request)

Add an HTTP Request node after the callback webhook. Set the method to PATCH and the URL to:

  • https://api.attio.com/v2/objects/people/records/{{ $json.body.datas[0].custom.id }}

Use Header Auth (Attio API token). Set the body to JSON with:

  • email_addresses → {{ $json.body.datas[0].contact.most_probable_email }}

  • phone_numbers → {{ $json.body.datas[0].contact.most_probable_phone }}

8. Test and activate

Click Test workflow, then add a new entry to your Attio list. The top flow fetches the person and company details and sends them to FullEnrich. After a few seconds, the callback webhook receives the results and updates the Attio record. Toggle the workflow to Active and make sure both webhook URLs are set to production.

Problem

Solution

Attio webhook never fires

Make sure you created the webhook in Attio → Settings → Webhooks for the event list.entry.created and pasted the production URL (not the test URL).

Get Person returns an error

Check that the Attio API token has read permissions on People. Verify the URL uses $json.body.events[0].parent_record_id.

Get Company returns an error

The person must have a linked company in Attio. If company[0].target_record_id is empty, the person has no company associated.

Callback webhook never receives data

Make sure you're using the production webhook URL (without webhook-test) and that the workflow is Active.

Update Person fails

Check that custom.id contains the correct Attio record ID. Verify the PATCH body JSON format matches Attio's API spec for email_addresses and phone_numbers.