Automate Data Ingestion into Salesforce Data Cloud with Zapier: Step-by-Step Guide

Quick, practical guide to push HubSpot contacts into Salesforce Data Cloud using the Ingestion API and Zapier webhooks. Includes setup, schema, Zap steps, and test tips for admins and architects.

Overview

Salesforce Data Cloud’s Ingestion API lets you push external records into the data lake in real time or batch. When a no-code automation platform like Zapier triggers on HubSpot events, you can transform and deliver fresh leads into Data Cloud without building a full integration stack.

Use case

A midsize company uses HubSpot for lead capture and Salesforce for sales. Using Zapier+Ingestion API removes nightly sync delays and delivers new leads to sales teams in near-real-time.

Pre-requisites

  • Salesforce org with Data Cloud enabled and appropriate permissions.
  • Zapier account with access to Webhooks and HubSpot app.
  • Salesforce Connected App with scopes: api, refresh_token, offline_access, and cdp_ingest_api.

1. Configure Salesforce Data Cloud

1.1 Create an Ingestion API connector

In Salesforce Setup: Data Cloud → External Integrations → Ingestion API. Create a connection (e.g., Zapier Connector) and upload your schema.

1.2 Define and upload schema (YAML)

Create a YAML schema for your object (for example ZapierApp.yaml) that defines fields such as leadId, firstName, lastName, email, phone, company, campaignSource, createdDate. Upload it to the connector’s Schema tab.

1.3 Create and deploy a Data Stream

From Data Stream, click New → choose Ingestion API as source → select the object created via schema upload, set category, primary key, and event time, and deploy to a Data Space.

2. Create a Salesforce Connected App

Create a Connected App (Setup → External Client App / Connected Apps) and add these scopes:

  • Manage user data via APIs (api)
  • Perform requests at any time (refresh_token, offline_access)
  • Manage Data Cloud Ingestion API data (cdp_ingest_api)

Save consumer key and consumer secret for use in Zapier.

3. Build the Zap (Zapier)

High level Zap flow:

  • Trigger: HubSpot – New Contact
  • Webhook Step 1: Get Salesforce OAuth Token (org access token)
  • Webhook Step 2: Exchange org token for Data Cloud access token
  • Webhook Step 3: POST JSON to Ingestion API endpoint
  • Action: Send confirmation email (optional)

3.1 HubSpot trigger

In Zapier, add HubSpot – New Contact trigger and test that it returns contact fields.

3.2 Get Salesforce org access token (Webhook – Custom Request)

Request configuration (application/x-www-form-urlencoded):

grant_type=password&username={USERNAME}&password={PASSWORD}&client_id={CONSUMER_KEY}&client_secret={CONSUMER_SECRET}

3.3 Get Data Cloud access token

POST to: {{instance_url}}/services/a360/token with body:

grant_type=urn:salesforce:grant-type:external:cdp&subject_token={{org_access_token}}&subject_token_type=urn:ietf:params:oauth:token-type:access_token

3.4 Call the Ingestion API (Webhook – Custom Request)

POST JSON payload to your ingestion endpoint:

https://<instance_url>/api/v1/ingest/sources/Zapier_Connector/lead_data

Headers:
Content-Type: application/json
Authorization: Bearer {{data_cloud_access_token}}

Body (example):
{
  "data": [
    {
      "leadId": "{{hubspot_id}}",
      "firstName": "{{firstname}}",
      "lastName": "{{lastname}}",
      "email": "{{email}}",
      "phone": "{{phone}}",
      "company": "{{company}}",
      "campaignSource": "Web",
      "createdDate": "2021-10-22T09:11:11.816319Z"
    }
  ]
}

3.5 Optional: Send notification

Add a Gmail step to send an email confirming ingestion status.

4. Test and Validate

Create a sample HubSpot contact and verify the Zap runs. In Data Cloud, use Query Builder (SQL) to confirm records landed in the data lake object.

Best practices & troubleshooting

  • Use descriptive primary keys in your schema to prevent duplicates.
  • Log webhook responses in Zapier for quick debugging.
  • Implement retry logic or dead-letter handling in case of transient failures.
  • Secure credentials in Zapier using Zapier’s built-in secrets or connection fields rather than plaintext.

Sample webhook payload (copyable)

{
  "data": [
    {
      "leadId": "12345",
      "firstName": "Asha",
      "lastName": "Patel",
      "email": "[email protected]",
      "phone": "+14155551234",
      "company": "Acme Co",
      "campaignSource": "Web",
      "createdDate": "2025-08-20T09:11:11.816319Z"
    }
  ]
}

Why this matters

Near real-time lead availability removes bottlenecks between marketing and sales, reduces manual work, and improves conversion velocity. For admins and architects, this pattern provides a reliable, low-maintenance ingestion route without building a custom ETL pipeline.

Need help implementing this pattern? Contact our Data Cloud experts for guidance and implementation support.