> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.meetgail.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.meetgail.com/_mcp/server.

# Add Bulk Contacts

> Creates many Gail contacts at once, ideal for spreadsheet-driven imports.

The Add Bulk Contacts node creates many contacts in Gail in a single step. It is built
for imports: give it a list of contact records, often the rows of a parsed spreadsheet,
and it adds them all at once, reporting which succeeded and which did not.

## When to use it

* You are importing a batch of people from a spreadsheet or an upload.
* An earlier step produced a list of contacts and you want them all in Gail before moving
  on.
* You want the successful contacts' IDs back so you can enroll them in a campaign in the
  same run.

For a single person, use [Add Contact](/platform/workflows/node-reference/gail/add-contact) instead.

## Inputs

| Field               | What it's for                                                                                                                                                                          | Example                    |
| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- |
| Contacts            | The list of people to create. Each record has a first name, last name, email, phone numbers, and business. Between 1 and 10,000 records.                                               | The rows from a parsed CSV |
| Phone number fields | When your records carry phone numbers in separate columns (such as a primary and a secondary number), name those columns here so each contact's numbers are gathered up automatically. | `phone_1`, `phone_2`       |
| Skip duplicates     | When on, contacts that already match an existing record are skipped rather than created again. On by default, which is the safe choice.                                                | `On`                       |

The Contacts field is usually an [expression](/platform/workflows/core-concepts/expressions/using-expressions-in-nodes)
pointing at the rows from a [Parse CSV](/platform/workflows/node-reference/files-and-documents/parse-csv)
step, but you can also type a fixed list when the set of people is known up front.

## Outputs

| Field           | What you get back                                                                       |
| --------------- | --------------------------------------------------------------------------------------- |
| Succeeded       | How many contacts were created.                                                         |
| Failed          | How many were rejected, whether by a bad value or a duplicate.                          |
| New contact IDs | The IDs of the newly created contacts, ready to feed into campaign enrollment.          |
| Failures        | A per-row list of what went wrong, so you can see exactly which records need attention. |

A few rejected rows do not stop the node. It still creates the good records and reports
the rest under Failures, so a large import is not blocked by a handful of bad rows.

## Example

Chen Insurance Group uploads a spreadsheet of 400 renewal prospects. A workflow parses
the file into rows, hands those rows to Add Bulk Contacts with duplicate-skipping on, and
gets back the list of new contact IDs. Those IDs flow straight into
[Add Contacts to Campaign (Bulk)](/platform/workflows/node-reference/gail/add-contacts-to-campaign-bulk)
to enroll everyone who was created into the spring renewal campaign.

![The Add Bulk Contacts node configuration panel, showing the contacts list and duplicate-skip setting.](https://fdr-prod-docs-files-public.s3.us-east-1.amazonaws.com/gail.docs.buildwithfern.com/bd40c0ec436cb358ae03ea57d672d486897e32299e38fd44def43784ef5851ae/docs/pages/platform/workflows/assets/gail-add-bulk-contacts.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIA6KXJSKKNFOCF7G4B%2F20260823%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260823T232933Z&X-Amz-Expires=604800&X-Amz-Signature=74f40056a9c2161bc78427dd6d8900a297436c5ca1a5cee2c6e9ef519152155c&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject)

Leave duplicate-skipping on unless you have a reason not to. If a run is retried after
a partial import, skipping duplicates means the retry will not create the same people
twice.

## Related nodes

#### [Add Contact](/platform/workflows/node-reference/gail/add-contact)

Create a single contact with structured details.

#### [Parse CSV](/platform/workflows/node-reference/files-and-documents/parse-csv)

Turn an uploaded spreadsheet into rows to feed this node.

#### [Add Contacts to Campaign (Bulk)](/platform/workflows/node-reference/gail/add-contacts-to-campaign-bulk)

Enroll the newly created contacts into a campaign.

#### [Add Contact to Contact List](/platform/workflows/node-reference/gail/add-contact-to-contact-list)

Add the new contacts to a curated list.