PPactDocs
Concepts

Importing data

Bring contacts and accounts into Pact from CSV files, CRM exports, and external integrations.

Pact supports multiple ingestion paths depending on where your data lives today. All paths converge on the same deduplication and consent logic.

CSV import

The most common way to bring data in. Go to Accounts → Import (for company records) or Contacts → Import (for individual contacts).

Required and optional columns

ColumnEntityNotes
emailContactPrimary dedup key
nameContactFull name, or split into first_name / last_name
companyContactCreates or matches an account record
domainAccountUsed for logo enrichment and CRM matching
phoneContactStored raw; normalized on display
consent_statusContactconfirmed, pending, or declined

Any unrecognized column is stored as a custom field on the contact or account. You can rename and type those fields in Settings → Custom Fields.

Deduplication

Contacts are deduplicated on email. If a row matches an existing contact:

  • New columns that are blank on the existing record are filled in.
  • Existing values are not overwritten unless you check Overwrite existing data on the import screen.
  • Consent status is never silently downgraded — a confirmed contact will not become pending on re-import.

Column mapping

After uploading your CSV, Pact presents a mapping screen. Fuzzy matching handles common column name variations (First Name, firstname, first_name all map to first_name). Review the mapping before confirming.

Large files

Files up to 50 MB are supported. Imports over 10 000 rows are processed asynchronously — you will receive a notification when complete. Progress is visible on the Activity page.

Every contact record carries a consent_status field:

StatusMeaning
confirmedContact has explicitly opted in. Can receive marketing sequences.
pendingConsent not yet collected. Use a re-engagement sequence before sending marketing.
declinedContact has opted out. All outbound is suppressed.

If your CSV does not include a consent_status column, Pact uses your tenant's default consent policy (found in Settings → Privacy).

Set consent_status = pending for any list where opt-in was implicit (e.g., a trade-show badge scan). Send a re-engagement sequence to collect explicit consent before enrolling in marketing campaigns.

API import

The REST API supports the same import logic programmatically:

bash
POST /v1/contacts
Content-Type: application/json

{
  "email": "[email protected]",
  "name": "Alice Nguyen",
  "company": "Acme Corp",
  "consent_status": "confirmed"
}

Bulk upserts (up to 500 records per request) are available at POST /v1/contacts/bulk.

CRM sync

If you are migrating from Salesforce, HubSpot, or another CRM, see Connecting your CRM for the integration-based sync path. CRM sync preserves relationship history and maps opportunity stages to Pact pipeline stages.

What happens after import

  1. Enrichment — if your tenant has an enrichment provider configured, Pact enqueues a background job to fill in missing firmographic data (industry, employee count, website) for new account records.
  2. Account matching — contacts are linked to accounts by domain if no explicit company column is present.
  3. Playbook evaluation — if a playbook rule matches a newly imported contact (e.g., "enroll any new contact from the SaaS industry segment"), it fires automatically.

Exporting data

Contacts and accounts can be exported as CSV from the list views via Export → Download CSV. The export includes all standard and custom fields.