Skip to main content
Glama

AIsa Sales

Bulk Create Contacts

post_apollo_contacts_bulk_create
Destructive

Bulk create contacts. Requires a master API key.

Published reference price: $0.012 USD per successful request. Account-specific pricing and final settlement may differ.

Input Schema

NameRequiredDescriptionDefault
bodyYes

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • addedInput schema / additionalProperties
      Added value: +false
    • removedInput schema / properties / append_label_names
      Removed value: -{
      -  "description": "Label names to append to each created contact",
      -  "type": "string"
      -}
    • addedInput schema / properties / body
      Added value: +{
      +  "properties": {
      +    "append_label_names": {
      +      "description": "Array of label names to add to ALL contacts in this request",
      +      "example": [
      +        "Hot Lead",
      +        "Q1 2024"
      +      ],
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "contacts": {
      +      "description": "Array of contact objects to create (maximum 100 contacts per request)",
      +      "items": {
      +        "properties": {
      +          "account_id": {
      +            "description": "Associated account ID",
      +            "example": "507f1f77bcf86cd799439011",
      +            "type": "string"
      +          },
      +          "contact_emails": {
      +            "description": "Array of email objects with position",
      +            "items": {
      +              "properties": {
      +                "email": {
      +                  "example": "john.doe@example.com",
      +                  "type": "string"
      +                },
      +                "position": {
      +                  "example": 0,
      +                  "type": "integer"
      +                }
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "contact_stage_id": {
      +            "description": "Contact stage ID",
      +            "example": "507f1f77bcf86cd799439014",
      +            "type": "string"
      +          },
      +          "email": {
      +            "description": "Contact's email address",
      +            "example": "john.doe@example.com",
      +            "type": "string"
      +          },
      +          "facebook_url": {
      +            "description": "Facebook profile URL",
      +            "example": "https://www.facebook.com/johndoe",
      +            "type": "string"
      +          },
      +          "first_name": {
      +            "description": "Contact's first name",
      +            "example": "John",
      +            "type": "string"
      +          },
      +          "hubspot_id": {
      +            "description": "HubSpot ID for matching and deduplication",
      +            "example": "12345678",
      +            "type": "string"
      +          },
      +          "last_name": {
      +            "description": "Contact's last name",
      +            "example": "Doe",
      +            "type": "string"
      +          },
      +          "linkedin_url": {
      +            "description": "LinkedIn profile URL",
      +            "example": "https://www.linkedin.com/in/john-doe-3f9a7c21",
      +            "type": "string"
      +          },
      +          "organization_id": {
      +            "description": "Associated organization ID",
      +            "example": "507f1f77bcf86cd799439012",
      +            "type": "string"
      +          },
      +          "organization_name": {
      +            "description": "Company/organization name",
      +            "example": "Acme Corporation",
      +            "type": "string"
      +          },
      +          "outreach_id": {
      +            "description": "Outreach.io ID",
      +            "example": "98765",
      +            "type": "string"
      +          },
      +          "phone": {
      +            "description": "Phone number",
      +            "example": "+1-555-0135",
      +            "type": "string"
      +          },
      +          "phone_numbers": {
      +            "description": "Array of phone number objects",
      +            "items": {
      +              "properties": {
      +                "position": {
      +                  "example": 0,
      +                  "type": "integer"
      +                },
      +                "raw_number": {
      +                  "example": "+1-555-0135",
      +                  "type": "string"
      +                }
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "phone_status_cd": {
      +            "description": "Phone validation status",
      +            "type": "string"
      +          },
      +          "photo_url": {
      +            "description": "Profile photo URL",
      +            "example": "https://example.com/photo.jpg",
      +            "type": "string"
      +          },
      +          "present_raw_address": {
      +            "description": "Physical address",
      +            "example": "San Francisco, CA",
      +            "type": "string"
      +          },
      +          "primary_title": {
      +            "description": "Primary job title (takes precedence over title)",
      +            "example": "VP of Sales",
      +            "type": "string"
      +          },
      +          "salesforce_account_id": {
      +            "description": "Salesforce Account ID",
      +            "example": "001pJNj9pix2idKsfj",
      +            "type": "string"
      +          },
      +          "salesforce_contact_id": {
      +            "description": "Salesforce Contact ID for matching",
      +            "example": "003xx000004TmiQAAS",
      +            "type": "string"
      +          },
      +          "salesforce_id": {
      +            "description": "Salesforce ID for matching and deduplication",
      +            "example": "003xx000004TmiQAAS",
      +            "type": "string"
      +          },
      +          "salesforce_lead_id": {
      +            "description": "Salesforce Lead ID",
      +            "example": "00Qxx000001abcDEFG",
      +            "type": "string"
      +          },
      +          "salesloft_id": {
      +            "description": "SalesLoft ID",
      +            "example": "54321",
      +            "type": "string"
      +          },
      +          "title": {
      +            "description": "Contact's job title",
      +            "example": "Senior Manager",
      +            "type": "string"
      +          },
      +          "twitter_url": {
      +            "description": "Twitter profile URL",
      +            "example": "https://twitter.com/johndoe",
      +            "type": "string"
      +          },
      +          "typed_custom_fields": {
      +            "additionalProperties": {
      +              "type": "string"
      +            },
      +            "description": "Custom field values as key-value pairs where key is the field_id and value is the field_value",
      +            "example": {
      +              "60c39ed82bd02f01154c470a": "2025-08-07"
      +            },
      +            "type": "object"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "maxItems": 100,
      +      "type": "array"
      +    },
      +    "owner_id": {
      +      "description": "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.",
      +      "example": "507f1f77bcf86cd799439013",
      +      "type": "string"
      +    },
      +    "run_dedupe": {
      +      "default": false,
      +      "description": "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 in `existing_contacts` without modifying them (except email_import placeholders, which are still merged). <br><br>Matching is checked in order: `id`, CRM identifiers, `person_id`, `email` (against the contact's primary and additional emails), then name plus company (matched on email domain, `organization_id`, or `organization_name`). <br><br>Unlike <a href=\"https://docs.apollo.io/reference/create-a-contact\">create a contact</a>, this endpoint never overwrites a matched contact's fields.",
      +      "example": true,
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "contacts"
      +  ],
      +  "type": "object"
      +}
    • removedInput schema / properties / contacts
      Removed value: -{
      -  "description": "Array of contacts to create",
      -  "type": "string"
      -}
    • removedInput schema / properties / run_dedupe
      Removed value: -{
      -  "description": "Enable deduplication. Default false.",
      -  "type": "boolean"
      -}
    • changedInput schema / required
      Previous value: -[
      -  "contacts"
      -]New value: +[
      +  "body"
      +]
  2. First observed

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description adds a genuinely useful non-annotation fact - the master API key requirement - but is silent on the 100-contact cap, dedupe/merge semantics, and partial-failure behavior for a destructive bulk write.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two functional sentences, front-loaded with the purpose, with no wasted prose. The injected pricing comment block consumes structure without helping tool selection, which is the only blemish on an otherwise tight definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and annotations cover the destructive/idempotency profile. Still missing for a destructive batch mutation are the max batch size, what happens on duplicate matches, and whether validation failures are partial or atomic.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% at the parameter level, so the description would normally need to compensate, and it says nothing about the body. The nested schema is nevertheless exhaustive - every contact field, owner_id, run_dedupe, and append_label_names carry their own descriptions - so effective semantics are already available. Baseline 3 reflects a description that adds nothing over the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Bulk create contacts'), and the 'bulk' qualifier cleanly separates it from the single-record sibling post_apollo_contacts. It never names that alternative, so the agent must still infer the boundary, which keeps this from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use bulk create versus post_apollo_contacts, post_apollo_contacts_bulk_update, or the dedupe-aware path. The one prerequisite given ('Requires a master API key') is an auth condition rather than selection guidance, so the agent gets no routing help beyond the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources