Agent: Build your own – Custom API signals

Last updated: October 20, 2026

A Custom API signals agent lets you send data from any external tool (Zapier, Clay, RB2B, your own app and so on) to Duo Copilot through a webhook: a web address your tool sends data to. Each time new data arrives, Duo treats it as a signal and can create a personalized sequence for each lead.

Use cases: website visitors, inbound form submissions, product usage triggers, event attendees: anything you can send as a web request. For more ideas, see our playbook repository.

How to set it up

Go to Settings → Duo Control Center → Duo Copilot → Agents, click Create agent, and under Select an agent choose Custom API signals in the Build your own group. Most of the setup happens in the Signal step.

The Select an agent list in the Create agent panel, with the Custom API signals card highlighted in the Build your own group

1. Name your agent and set its label

  • Agent name: the internal name for this agent. If you leave it empty, Amplemarket names it after the agent type and the date, for example Funding 10/19 @ 08:49 PM.
  • Signal label: how each lead is labeled in your team's Duo Copilot feed (for example "New inbound lead" or "Website visitor").

2. Choose the signal target

Choose whether the data you send describes people or companies:

  • People: each new person you send is a signal.
  • Companies: each new company you send is a signal. Duo suggests several contacts at that company who match your filters.

3. Configure the webhook and send a test request

In Configure webhook, you get a unique webhook URL. Copy it and set it as the destination in your external tool (Zapier, Clay, Make, your backend and so on). It accepts a POST request with a JSON body containing the fields you want to send.

We have step-by-step guides for the most common tools:

Then send a sample request from your tool, so Amplemarket knows what data to expect. The setup screen confirms when the test data arrives.

Good to know: while you're creating the agent, anything sent to the webhook is treated as test data for setting up your mappings. It doesn't generate leads. Once you create the agent, every request is treated as real and generates leads.

4. Review the enrichment mappings

After the test data arrives, Amplemarket automatically maps your fields to the identifiers it needs to look up each person or company. Review the Enrichment mappings and adjust them if needed.

Why this matters: Amplemarket uses these fields to match your data with real people and companies in its database. Without a match, Duo can't enrich the lead (no email, no LinkedIn, no way to reach out), so the lead isn't processed.

For people, map at least one of:

  • LinkedIn URL
  • Email
  • Person name + company (name or domain)

For companies, map at least one of:

  • Company name
  • Company domain
  • Company LinkedIn URL

Tip: if your data includes an email address and you want Duo to process every lead, even ones it can't match with someone in our database, turn on Generate leads even if enrichment fails. See the FAQ below for how it works.

The Signal step of a Custom API signals agent after test data was received, showing Configure webhook and the Enrichment mappings with Generate leads even if enrichment fails turned on

5. Set up filters and distribution

Click Next step to set up Filters and Distribution as you would for any agent.

6. Tell Duo how to write to these leads

In the Output step:

  • AI personalization fields (optional): select the fields from your data that Duo should use as extra context when writing. Rule of thumb: pick fields that explain why each person is a relevant lead or what they did (for example pages visited, form responses or product usage). Basics like job title or company already come from Amplemarket's enrichment.
  • How this agent writes to the leads it finds: tell Duo how to approach these leads. A good prompt covers:
    1. What the signal is: for example, "These are leads who just filled out our demo request form."
    2. How to use the AI personalization fields: for example, "Use the 'use_case' field to tailor the messaging to their needs."
    3. How to approach the leads: for example, "Be helpful, reference their interest, and suggest a quick call."

Click Create Agent.

FAQs

What's the difference between Custom API signals and Custom CRM signals?

Custom CRM signals agents pull data from a Salesforce report or HubSpot list. Custom API signals agents accept data from any tool through a webhook. If your data lives in your CRM, use Custom CRM signals. If it comes from somewhere else (your product, a third-party tool, a marketing platform), use Custom API signals.

Do I need a developer to set this up?

Not necessarily. With no-code tools like Zapier, Make or Clay, you can set up the webhook without writing code. You only need to know which fields your tool sends.

We have step-by-step guides for the most common tools:

How do I send test data?

Send a POST request to your webhook URL with a JSON body. For example:

cURL:

curl -X POST https://api.amplemarket.com/custom_signals/<your_signal_id>/entries \
  -H "Content-Type: application/json" \
  -d '{ "email": "jane@acme.com", "full_name": "Jane Smith", "company_name": "Acme", "pages_visited": "/pricing, /demo" }'

Zapier, Make or Clay: add an HTTP or webhook action, set the method to POST, paste your webhook URL, and set up the JSON body with the fields you want to send.

How long until leads show up in my Duo Copilot feed?

Duo checks for new data and tries to generate leads about every hour. Once your agent is set up and data is coming in, expect leads within the hour.

Keep in mind that Duo has a daily lead limit per user. Even though Duo runs every hour, it only generates leads up to that limit.

What happens if I send the same person or company more than once?

Each request is a separate signal. If someone visits your website today and you send it to Duo, that's one signal. If they visit again next month and you send it again, Duo treats it as a second signal.

How does test data vs. live data work?

During setup: while you're creating the agent, requests sent to the webhook URL are test data. They're used to set up your field mappings, and no leads are generated.

After creation: once you create the agent, every request generates real leads.

When editing: if you edit the agent later and refresh the mappings, Duo uses the latest request received, which at that point is a real request, not a test.

What if Amplemarket can't match a lead with someone in its database?

By default, unmatched leads are skipped: Duo has no way to reach out without contact details.

If your data includes an email and you want Duo to process every lead whether or not it finds a match, turn on Generate leads even if enrichment fails in the agent's Signal step.

Note: unenriched leads skip most filters. Only exclusion lists and recently contacted filters still apply. Learn more in Processing unenriched leads.

Is the webhook URL secure?

The webhook URL contains a unique token for your agent. Anyone with the URL can send data to it, so treat it like a password: don't share it publicly or put it in public code repositories.

What format should the data be in?

The webhook accepts a JSON body (Content-Type: application/json). Nested objects are supported: Amplemarket flattens them into dot-notation paths (for example person.name or company.domain) for field mapping. The maximum size is 1 MB.

What status codes does the webhook return?

Code Meaning
202 Accepted Request received successfully
400 Bad Request Malformed JSON, empty body, or a body that isn't an object
404 Not Found Invalid webhook token
413 Content Too Large The data is larger than 1 MB

Can I update the field mappings after creating the agent?

Yes. Open the agent from your Agents list and refresh the mappings to pull in the latest request received. Duo uses it to update the available fields and mappings. Then click Save changes.