---
title: "Bulk Create Contacts"
method: POST
path: "/contacts/bulk_create"
tags: ["Contacts"]
---

# Bulk Create Contacts

`POST /contacts/bulk_create`

This endpoint doesn't consume Apollo credits. Learn more about [API pricing and credits](https://docs.apollo.io/docs/api-pricing).

<a href="https://knowledge.apollo.io/hc/en-us/articles/5995459280525-View-and-Edit-Contacts" target="_blank">Contacts</a> are people saved in Apollo.<br><br>Use the Bulk Create Contacts endpoint to create up to 100 contacts in a single API request. This endpoint supports intelligent deduplication and returns separated arrays for newly created and existing contacts. <br><br>Important: This endpoint creates new contacts but doesn't update existing ones (except for placeholder contacts from email imports). Existing contacts that match the criteria are returned in the <code>existing_contacts</code> array without modification.<br><br>To update existing contacts, use the <a href="https://docs.apollo.io/reference/bulk-update-contacts">Bulk Update Contacts endpoint</a>.

## Request body

- object
  - `contacts` object[], required — Array of contact objects to create (maximum 100 contacts per request)
    - `first_name` string — Contact's first name
    - `last_name` string — Contact's last name
    - `email` string — Contact's email address
    - `title` string — Contact's job title
    - `primary_title` string — Primary job title (takes precedence over title)
    - `organization_name` string — Company/organization name
    - `phone` string — Phone number
    - `present_raw_address` string — Physical address
    - `linkedin_url` string — LinkedIn profile URL
    - `facebook_url` string — Facebook profile URL
    - `twitter_url` string — Twitter profile URL
    - `photo_url` string — Profile photo URL
    - `account_id` string — Associated account ID
    - `organization_id` string — Associated organization ID
    - `contact_stage_id` string — Contact stage ID
    - `salesforce_id` string — Salesforce ID for matching and deduplication
    - `hubspot_id` string — HubSpot ID for matching and deduplication
    - `salesforce_lead_id` string — Salesforce Lead ID
    - `salesforce_contact_id` string — Salesforce Contact ID for matching
    - `salesforce_account_id` string — Salesforce Account ID
    - `outreach_id` string — Outreach.io ID
    - `salesloft_id` string — SalesLoft ID
    - `phone_status_cd` string — Phone validation status
    - `typed_custom_fields` object — Custom field values as key-value pairs where key is the field_id and value is the field_value
    - `contact_emails` object[] — Array of email objects with position
      - `email` string
      - `position` integer
    - `phone_numbers` object[] — Array of phone number objects
      - `raw_number` string
      - `position` integer
    - `contact_role_type_ids` string[] — Array of contact role type IDs
  - `append_label_names` string[] — Array of label names to add to ALL contacts in this request
  - `owner_id` string — Owner user ID applied to all contacts in this batch. Defaults to current user if omitted. Returns 422 if the ID does not belong to the current team.
  - `run_dedupe` boolean — Enable full deduplication across all sources. When false (default), creates duplicates for non-email_import sources and merges with email_import placeholders only. When true, returns existing contacts without modifying them (except email_import placeholders which are still merged). Matches by email, CRM IDs, or name + organization

## Response `200`

200 - Successful bulk create operation

- object
  - `created_contacts` object[] — Array of newly created contacts
    - `id` string — Contact ID
    - `first_name` string — Contact's first name
    - `last_name` string — Contact's last name
    - `email` string — Contact's email address
    - `title` string — Contact's job title
    - `organization_name` string — Company/organization name
    - `team_id` string — Team ID
    - `owner_id` string — Contact owner ID
    - `contact_stage_id` string — Contact stage ID
    - `created_at` string, date-time — Contact creation timestamp
    - `updated_at` string, date-time — Contact last update timestamp
  - `existing_contacts` object[] — Array of existing contacts that matched deduplication criteria (returned without modification, except for email_import placeholders which may be merged)
    - `id` string — Contact ID
    - `first_name` string — Contact's first name
    - `last_name` string — Contact's last name
    - `email` string — Contact's email address
    - `title` string — Contact's job title
    - `team_id` string — Team ID
    - `owner_id` string — Contact owner ID
    - `created_at` string, date-time — Contact creation timestamp
    - `updated_at` string, date-time — Contact last update timestamp

## Other responses

- `401` — 401 - Unauthorized
- `422` — 422 - Unprocessable Entity
- `429` — 429 - Too Many Requests
- `500` — 500 - Internal Server Error

---

[API](https://skmtc.dev/apollo/apis/apollo-rest-api.md) · [All operations](https://skmtc.dev/apollo/apis/apollo-rest-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/apollo/apollo-rest-api/revisions/c715a05fa6e2/schema)
