Skip to Content

Pardot

Sync prospects, list membership, and custom field data to Salesforce Pardot (Marketing Cloud Account Engagement) for B2B marketing automation, lead scoring, and nurture campaigns. Zeotap pushes prospect records, manages list membership, and updates custom fields via the Pardot API v5 using Salesforce SSO authentication.

Prerequisites

  • A Salesforce account with Pardot (Marketing Cloud Account Engagement) provisioned
  • A Salesforce Connected App configured with the pardot_api OAuth scope
  • The Pardot Business Unit ID for your account
  • API access enabled — Pardot API v5 requires Salesforce SSO authentication (classic Pardot API keys are no longer supported)

Permissions

Your Salesforce Connected App and user account must have the following permissions:

CapabilityRequired Permission
Read/Write ProspectsMarketing User permission + Pardot role with Prospect access
Manage ListsPardot role with List access
Custom FieldsPardot Administrator or custom role with Field access

The Connected App must include the pardot_api OAuth scope. Without this scope, the Salesforce access token cannot authenticate against the Pardot API.

Tip: Assign the “Pardot Administrator” role to the integration user to avoid permission issues during initial setup. You can restrict permissions later once you have confirmed the sync is working.

Authentication

Pardot API v5 authenticates exclusively through Salesforce OAuth2 using a Connected App. Classic Pardot-only API keys (user key + API key) were deprecated with API v4 and are no longer supported.

  1. Log in to Salesforce as an administrator
  2. Navigate to Setup > App Manager and click New Connected App
  3. Fill in the required fields:
    • Connected App Name: e.g., “Zeotap Pardot Integration”
    • API Name: auto-populated
    • Contact Email: your admin email
  4. Under API (Enable OAuth Settings), check Enable OAuth Settings
  5. Set the Callback URL to your Zeotap OAuth callback URL
  6. Under Selected OAuth Scopes, add:
    • Manage Pardot services (pardot_api)
    • Perform requests at any time (refresh_token, offline_access)
  7. Click Save, then Continue
  8. On the Connected App detail page, click Manage Consumer Details to view the Consumer Key (Client ID) and Consumer Secret (Client Secret)
  9. Complete the OAuth authorization flow to obtain a Refresh Token with the pardot_api scope
  10. Find your Pardot Business Unit ID in Salesforce under Setup > Pardot > Pardot Account Setup, or in Marketing Cloud Account Engagement Setup under Business Unit. The ID starts with 0Uv.
  11. In Zeotap, create a new Pardot destination and enter the Client ID, Client Secret, Refresh Token, and Business Unit ID

Note: If your Salesforce org has multiple Pardot Business Units, you must create a separate destination in Zeotap for each Business Unit, each with its own Business Unit ID.

Configuration

FieldTypeRequiredDescription
Pardot Business Unit IDTextYesThe Salesforce Business Unit ID that owns the Pardot account (starts with 0Uv). Found in Salesforce Setup > Pardot > Pardot Account Setup.
Pardot API Base URLTextNoThe Pardot API base URL. Defaults to https://pi.pardot.com. Use https://pi.demo.pardot.com for sandbox environments.
API VersionSelectNoPardot API version. Version 5 is recommended (default). Version 4 is available for legacy compatibility.

Target Settings

FieldTypeRequiredDescription
Object TypeSelectYesThe Pardot object type to sync data to: Prospects, List Membership, or Custom Fields
List IDTextConditionalNumeric ID of the Pardot list (required for List Membership). Find this in Pardot under Marketing > Segmentation > Lists.
Upsert FieldSelectNoThe field used to match prospects on upsert: Email Address (default) or Salesforce CRM ID (fid).

Supported Operations

Sync Modes

ModeSupported
UpsertYes
InsertYes
UpdateYes
Mirror

Audience Sync Modes

ModeSupported
AddYes
RemoveYes
MirrorYes
UpsertYes

Features

  • Field Mapping: Yes
  • Schema Introspection: No — Pardot prospect fields are well-known. Custom fields vary per account and are not auto-discovered.

Required Mapping Fields

All object types require the Email Address field as the primary identifier. For List Membership, you can alternatively use the Salesforce CRM ID (fid).

Object TypeRequired FieldsPurpose
ProspectsemailPrimary prospect identifier in Pardot
List Membershipemail (or fid)Identifies the prospect for list add/remove
Custom FieldsemailIdentifies the prospect to update

Default Destination Fields

Prospects

email, first_name, last_name, company, job_title, phone, city, state, country, zip, website, industry, annual_revenue, employees, source, campaign_id, score, grade, notes, fid

List Membership

email, fid

Custom Fields

email (plus any custom fields defined in your Pardot account)

Choosing the Right Object Type

Prospects

Use when you need to create or update prospect records in Pardot with profile data from your warehouse. This is the most common sync target. Typical use cases include enriching prospect records with firmographic data, syncing lead scores from your data warehouse, and pushing CRM attributes back to Pardot for segmentation.

List Membership

Use when you need to manage Pardot list membership based on audience segments. Lists in Pardot drive email campaigns, automation rules, and dynamic content. Typical use cases include syncing audience segments as Pardot lists, managing nurture campaign eligibility, and controlling email suppression lists.

Custom Fields

Use when you need to update custom field values on existing prospects. Custom fields in Pardot hold account-specific data like product usage metrics, subscription tiers, or custom scoring attributes. This object type patches the prospect record with the mapped custom field values.

How It Works

Prospects

Zeotap reads rows from your model query, applies field mapping, and sends each row as an individual API request to the Pardot Prospects API. Sync mode determines the endpoint:

  • Upsert: POST /api/v5/objects/prospects/do/upsertLatestByEmail?email=... — creates a new prospect when no match exists, or updates the most recently modified prospect matching the email.
  • Insert: POST /api/v5/objects/prospects — creates a new prospect. Fails if a prospect with the same email already exists.
  • Update: Zeotap first resolves the email to a prospect ID via GET /api/v5/objects/prospects/do/readByEmail, then issues PATCH /api/v5/objects/prospects/{id}. Rows with no matching prospect are failed.

Pardot v5 expects field names in camelCase (for example, firstName, lastName, jobTitle, annualRevenue, campaignId). Zeotap automatically translates the standard snake_case field names in the default field list to their camelCase API equivalents before sending. Custom field API names (defined in your Pardot account as snake_case) are forwarded unchanged.

List Membership

Pardot v5 list memberships are identified by numeric IDs. Zeotap resolves the prospect email to a prospect ID (via readByEmail) before calling the List Memberships API.

  • Add: POST /api/v5/objects/list-memberships with body {"listId": <id>, "prospectId": <id>}.
  • Remove: Zeotap queries GET /api/v5/objects/list-memberships?listId=&prospectId= to find the membership row, then issues DELETE /api/v5/objects/list-memberships/{id}.
  • Mirror: Uses DiffOps to split added vs removed rows and applies the two flows above.

Rows whose email does not resolve to a prospect are counted as failures on add and as no-ops (already removed) on remove.

Custom Fields

Custom field updates are processed as prospect upserts against do/upsertLatestByEmail. Zeotap sends the mapped custom field key-value pairs (custom field API names in Pardot are snake_case and are forwarded unchanged) to the Pardot Prospects API.

Rate Limits

Pardot enforces the following API rate limits:

Limit TypeThresholdScope
Daily API calls25,000Per Pardot Business Unit
Concurrent API calls5Per Pardot Business Unit

Zeotap automatically retries on HTTP 429 (Too Many Requests) responses with exponential backoff. If you consistently hit rate limits, consider:

  • Reducing sync frequency
  • Splitting large syncs across multiple schedules
  • Contacting Salesforce to increase your API quota

Note: The 25,000 daily limit applies to all API calls across your Pardot account, not just Zeotap. Monitor your API usage in Pardot under Admin > Usage and Limits.

Best Practices

Email as the primary identifier

Pardot uses email address as the primary unique identifier for prospects. Ensure your source data has clean, deduplicated email addresses. Sending rows without an email (or with invalid emails) will cause row-level failures.

Custom field setup

Create custom fields in Pardot before syncing custom field data. Navigate to Admin > Prospect Fields > Custom Fields to define fields with the correct types. Custom field API names in Pardot are snake_case (for example, subscription_tier) and are forwarded to Pardot unchanged. Standard prospect fields are mapped from snake_case (as shown in Zeotap’s default field list) to Pardot’s camelCase API names automatically.

Connected App scoping

For security, restrict the Connected App to only the scopes needed: pardot_api and refresh_token. Avoid granting full access unless other integrations require it.

Sandbox testing

Use Pardot’s sandbox environment (https://pi.demo.pardot.com) for testing before syncing to production. Set the Pardot API Base URL to the sandbox URL in your Zeotap destination configuration.

Audience sync strategy

When using audience syncs to manage Pardot lists, use Mirror mode to keep the list in exact sync with your audience segment. This automatically adds new members and removes prospects that are no longer in the audience.

Troubleshooting

Authentication failed (401)

Verify your Connected App credentials in Salesforce under Setup > App Manager. Ensure the Connected App has the pardot_api OAuth scope. If using a refresh token, confirm it has not expired or been revoked. Re-authorize the Connected App to obtain a new refresh token.

Business Unit ID not found

The Business Unit ID must start with 0Uv. Find it in Salesforce under Setup > Pardot > Pardot Account Setup. If you have multiple Pardot Business Units, ensure you are using the correct ID for the target account.

Insufficient permissions (403)

The Salesforce user associated with the Connected App must have the “Marketing User” permission and an appropriate Pardot role (e.g., “Pardot Administrator”). Check the user’s profile and Pardot role in Salesforce Setup.

Prospect not found on update

When using Update sync mode, the prospect must already exist in Pardot. Zeotap resolves the email to a prospect ID before patching; rows whose email does not match any existing record are failed. Switch to Upsert mode to automatically create missing prospects.

Rate limit exceeded (429)

Pardot enforces a 25,000 daily API call limit per Business Unit. Zeotap retries automatically with backoff, but if the limit is exhausted, remaining rows will fail. Reduce sync frequency, batch sizes, or contact Salesforce to increase your quota.

List ID not found

Verify the List ID in Pardot under Marketing > Segmentation > Lists. Click the target list and check the URL for the numeric ID. The list must be active — archived or deleted lists will return errors.

API version mismatch

Pardot API v5 is required for Salesforce SSO authentication. If you receive errors about unsupported API versions, ensure the API Version is set to “5” in the destination configuration. Version 4 is available for legacy compatibility but requires the deprecated Pardot-only authentication.

Duplicate prospect error

Pardot does not allow duplicate email addresses on insert. If you attempt to insert a prospect that already exists, the API returns a duplicate error. Use Upsert sync mode (which calls do/upsertLatestByEmail) to update existing prospects instead of failing on duplicates.

Last updated on