IntegrationsUpdated 2026-07-17

A Complete GoHighLevel Skip Tracing Workflow

Wire Acquired Data webhooks into a GoHighLevel workflow so traced sellers land in your pipeline, tagged and ready for campaigns.

If GoHighLevel is your CRM, the goal is simple: every list you skip trace should show up in a GHL pipeline automatically — contacts created, tagged by list, dropped into the right campaign — with no CSV downloads and no manual imports in between. Acquired Data's webhooks were built to make this a copy-paste job: every payload field is flat and top-level, exactly the shape GHL's webhook trigger likes. Here's the full recipe.

How the pieces fit

Acquired Data fires a webhook when a bulk trace job finishes. GHL workflows can start from an Inbound Webhook trigger. Point the first at the second and every completed trace becomes a workflow run carrying the job's stats and a download_url / results_url for the traced contacts.

Step-by-step setup

  1. Create the GHL workflow. In GoHighLevel, create a new workflow and choose Inbound Webhook as the trigger. GHL generates a unique URL — copy it.
  2. Paste it into Acquired Data. Go to Dashboard → Webhooks and save the GHL URL as your default webhook. The default fires for every bulk trace on your account — including jobs you run from the dashboard UI, not just API jobs — so this one paste covers your whole operation.
  3. Send a test payload. Use the test delivery from the Webhooks page (or run a small real job) while the GHL trigger is in mapping mode. GHL captures the sample and lists every field.
  4. Map the fields. Because the payload is flat — event, job_id, filename, total_rows, matched_rows, credits_charged, download_url, results_url, completed_at, error_message — each field maps directly to a contact field or custom field with no JSON path digging. A common pattern: store filename as a tag source and download_url in a custom field.
  5. Branch on event type. Add an If/Else on the event field: job.completed continues down the happy path; job.failed (which arrives with error_message set) routes to an internal notification so someone re-runs the list. Failed jobs auto-refund their credits, so the failure branch is purely operational, not billing cleanup.
  6. Use the results. On the completed branch, download_url is a signed CSV link you can send to yourself or feed into your import automation, and results_url returns the traced rows as flat JSON (authenticated with your API key) if you're creating contacts one by one via GHL's API or a middleware step. Tag the created contacts with the list name and enroll them in the campaign that matches the list.

Per-job routing with callback_url

The account-wide default webhook is the right tool for "everything goes to one pipeline." If different lists should hit different GHL workflows — say, probate lists into a nurture pipeline and preforeclosure into a fast-response one — submit those jobs through the API and pass each workflow's inbound-webhook URL as callback_url on the job. An explicit callback_url takes precedence over the default for that job, so both mechanisms coexist cleanly.

Practical notes

  • Deliveries are attempted up to 3 times with a 10-second timeout, so a brief GHL hiccup won't lose the event. There's also a retry-webhook endpoint to re-send the completion event for a finished job.
  • Payloads are signed with an X-AcquiredData-Signature header. GHL's inbound trigger won't verify it for you, which is fine for most setups — but if you route through middleware (n8n, Make, a small function), verify the HMAC there.
  • Single lookups work too: POST /api/v1/trace returns flat result fields synchronously, handy for tracing one inbound lead from inside a GHL workflow rather than waiting for a batch.

Next steps

The GoHighLevel guide covers this setup with screenshots, the webhooks guide documents the default-webhook settings, and the API webhooks guide has the full payload reference and signature details.