Skip to content

Case study · B2B lead data

CRM Export Pipeline

Serverless export of B2B data into six CRMs and sales tools

Data InfrastructureServerlessCRM IntegrationsReporting

At a glance

Client
A B2B lead-data platform
Industry
B2B lead data
Role
Architecture and engineering
Stack
AWS Lambda · Amazon SQS · AWS Step Functions
AWS · SERVERLESSExport requestCHARGED ON NET-NEWRECORDS ONLYSQS queue~7K JOBS A DAYUP TO 25K RECORDSPER JOBStep Functions+ LambdaMAP FIELDSDEDUPCREATE / UPDATECRMs + SEPsSALESFORCE · HUBSPOTDYNAMICS · PIPEDRIVESALESLOFT · OUTREACHCSV reportSUCCESS · FAILEDSKIPPED · AUDITED

~7Kexport jobs a day

Project details

A B2B lead-data platform let its users export the companies and contacts they found straight into the tools their sales teams already use. This is the infrastructure behind that export: a serverless pipeline handling around 7,000 export jobs a day, each carrying up to 25,000 records, into Salesforce, HubSpot, Microsoft Dynamics, Pipedrive, Salesloft and Outreach.

Why exporting at scale is hard

Exporting a few hundred contacts into a CRM is simple. Doing it thousands of times a day, for lists of up to 25,000 records, into six destinations that each model data differently, is not. Every CRM has its own objects, fields and API limits, one bad record must not sink the rest of a job, and users need to know exactly what happened to each one.

Built on AWS

Export requests go onto an Amazon SQS queue, and AWS Step Functions orchestrate each job through Lambda functions. A 25,000-record export and a small one take the same path, with no servers to size for the peak, and the processing framework is built for low latency.

Every CRM is different

Each CRM and sales engagement platform has its own objects, fields and rules, so every destination has its own field mapping. Rule-based logic decides, record by record, whether to create or update, and deduplicates so the same company or contact is not written twice.

Charging only for new data

Exports draw on a credit system that charges users only for net-new data, so a record they already have costs nothing to send again. Every export produces a structured CSV report that lists each record as succeeded, failed or skipped. A history page keeps every export with its downloadable report, role-based access control governs who can export what, and the data is fully audited.

The life of an export

  1. Request — a user exports a list, and only net-new records draw on their credits
  2. Queue — the job goes onto Amazon SQS
  3. Orchestrate — AWS Step Functions run the job through Lambda functions
  4. Map — each record is mapped to the destination's fields
  5. Match — rule-based logic creates or updates each record and deduplicates
  6. Deliver — records are written to the CRM or sales engagement platform
  7. Report — a CSV marks every record as succeeded, failed or skipped, and the export joins the user's history

Around 7,000 export jobs a day, up to 25,000 records each, with every user charged only for the records that were new to them.

See the work in action. Start your project with us.

Start a project