CONNECT APP
Build with Apollo
CRM
- OAuth
MCP
Give your agent Apollo tools
Every Apollo action is exposed as an MCP tool on Pipedream's remote server. Point a client at it with your end user's ID and Connect resolves that user's Apollo account for each tool call — you store no tokens.
// accessToken: mint a short-lived token with the Connect SDK — see the MCP guide
const transport = new StreamableHTTPClientTransport(
new URL("https://remote.mcp.pipedream.net/v3"),
{
requestInit: {
headers: {
Authorization: `Bearer ${accessToken}`,
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
"x-pd-app-slug": "apollo_io_oauth",
},
},
},
)
const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)
const { tools } = await mcp.listTools()
// e.g. run Add Contacts to Sequence:
const result = await mcp.callTool({
name: "apollo_io_oauth-add-contacts-to-sequence",
arguments: {
sequenceId: "Sequence ID",
contactIds: ["Contact IDs"],
},
})# access_token: mint a short-lived token with the Connect SDK — see the MCP guide
headers = {
"Authorization": f"Bearer {access_token}",
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", # any stable ID for this user in your system
"x-pd-app-slug": "apollo_io_oauth",
}
async with streamablehttp_client("https://remote.mcp.pipedream.net/v3", headers=headers) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
# e.g. run Add Contacts to Sequence:
result = await session.call_tool("apollo_io_oauth-add-contacts-to-sequence", {
"sequenceId": "Sequence ID",
"contactIds": ["Contact IDs"],
})API PROXY
Call the Apollo API directly
For an endpoint with no pre-built tool, the Connect proxy forwards your request to the Apollo API with the connected user's credentials attached. You store no tokens and write no refresh logic.
const resp = await pd.proxy.get({
externalUserId: "{external_user_id}", // any stable ID for this user in your system
accountId: "apn_xxxxxxx",
url: "https://app.apollo.io/api/v1/users/api_profile",
})
// Any allowed Apollo endpoint works here. Pipedream attaches the
// connected account's credentials to the outgoing request.# The path segment is the target URL, URL-safe base64 encoded:
# https://app.apollo.io/api/v1/users/api_profile
curl "https://api.pipedream.com/v1/connect/{project_id}/proxy/aHR0cHM6Ly9hcHAuYXBvbGxvLmlvL2FwaS92MS91c2Vycy9hcGlfcHJvZmlsZQ?external_user_id={external_user_id}&account_id=apn_xxxxxxx" \
-H "Authorization: Bearer {access_token}" \
-H "x-pd-environment: production"SDK
Run Apollo actions from your backend
Connect a user's Apollo account once, then run Add Contacts to Sequence on their behalf from your own code — TypeScript, Python, or plain HTTP.
import { PipedreamClient } from "@pipedream/sdk"
const pd = new PipedreamClient({
projectId: process.env.PIPEDREAM_PROJECT_ID!,
clientId: process.env.PIPEDREAM_CLIENT_ID!,
clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
projectEnvironment: "production",
})
const result = await pd.actions.run({
id: "apollo_io_oauth-add-contacts-to-sequence",
externalUserId: "{external_user_id}", // any stable ID for this user in your system
configuredProps: {
apollo_io_oauth: { authProvisionId: "apn_xxxxxxx" },
sequenceId: "Sequence ID",
contactIds: ["Contact IDs"],
},
})from pipedream import Pipedream
pd = Pipedream(
client_id="{oauth_client_id}",
client_secret="{oauth_client_secret}",
project_id="{project_id}",
project_environment="production",
)
result = pd.actions.run(
id="apollo_io_oauth-add-contacts-to-sequence",
external_user_id="{external_user_id}", # any stable ID for this user in your system
configured_props={
"apollo_io_oauth": {"authProvisionId": "apn_xxxxxxx"},
"sequenceId": "Sequence ID",
"contactIds": ["Contact IDs"],
},
)curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
-H "Content-Type: application/json" \
-H "X-PD-Environment: production" \
-H "Authorization: Bearer {access_token}" \
-d '{
"external_user_id": "{external_user_id}",
"id": "apollo_io_oauth-add-contacts-to-sequence",
"configured_props": {
"apollo_io_oauth": { "authProvisionId": "apn_xxxxxxx" },
"sequenceId": "Sequence ID",
"contactIds": ["Contact IDs"]
}
}'TOOLS
Apollo actions
On-demand operations your product or agent can configure and run on behalf of a connected user.
-
Add Contacts to Sequence
actionAdds one or more contacts to an email outreach sequence in Apollo. Requires a sequence ID, contact IDs, and a sending email account ID. Use List Metadata (typesequences) to find sequence IDs, (typeemail_accounts) to find email account IDs. Use Search Contacts to find contact IDs to enroll. SetsequenceActiveInOtherCampaignstotrueto enroll contacts already active in other sequences. See the documentationWritev0.0.2 -
Create or Update Account
actionCreates a new account (company) or updates an existing one in your Apollo CRM. To create, omitaccountIdand provide at least aname. To update, provide theaccountIdand any fields to change. Use Search Accounts to find existing accounts before updating. Use List Metadata (typeaccount_stages) to discover valid stage IDs. See the documentationWritev0.0.2 -
Create or Update Contact
actionCreates a new contact or updates an existing one in your Apollo CRM. To create, omitcontactIdand provide at least anemail. To update, provide thecontactIdand any fields to change. Use Search Contacts to find existing contacts by name or email before updating. Use List Metadata (typecontact_stages) to discover valid stage IDs. TheaccountIdlinks this contact to a company — use Search Accounts to find the account ID. See the documentationWritev0.0.2 -
Create or Update Opportunity
actionCreates a new opportunity (deal) or updates an existing one in your Apollo CRM. To create, omitopportunityIdand providename,opportunityStageId,closedDate, andaccountId. To update, provide theopportunityIdand any fields to change. Use Get Opportunity to fetch current details before updating. Use List Metadata (typeopportunity_stages) to discover valid stage IDs, and Search Accounts to find account IDs. Use Get Current User to find owner IDs. See the documentationWritev0.0.2 -
Enrich Person
actionEnriches a person's information using Apollo's 270M+ contact database. Pass any combination of name, email, domain, organization, or LinkedIn URL — the more info you provide, the better the match. This action consumes Apollo enrichment credits. Returns detailed profile data including title, company, seniority, phone numbers, and social profiles. Do NOT pass personal social media URLs as thedomain— use only company domains likeapollo.io. IfrevealPhoneNumberistrue, you must also provide awebhookUrlwhere Apollo will POST the phone data asynchronously. See the documentationWritev0.0.2 -
Get Current User
actionReturns the authenticated user's profile including their ID, name, email, and team information. Use this tool first to identify the current user's ID for filtering records by owner in Search Contacts or Search Accounts. See the documentationRead-onlyv0.0.2 -
Get Opportunity
actionFetches a single opportunity (deal) by ID with full details including name, amount, stage, close date, owner, and linked account. Use Create or Update Opportunity to modify it after retrieval. See the documentationRead-onlyv0.0.2 -
List Metadata
actionLists metadata such as stages, sequences, labels, email accounts, or team users. Use this tool to discover valid IDs before calling write tools — e.g., find a contact stage ID for Create or Update Contact, a sequence ID for Add Contacts to Sequence, or an opportunity stage ID for Create or Update Opportunity. See the documentationRead-onlyv0.0.2 -
Search Accounts
actionSearches for accounts (companies) in your Apollo CRM by name, stage, or sort criteria. Returns account name, domain, industry, and stage. Use this to find accounts before updating them with Create or Update Account or linking them to contacts or opportunities. See the documentationRead-onlyv0.0.2 -
Search Contacts
actionSearches for contacts in your Apollo CRM by keyword, stage, or sort criteria. Returns contact name, email, title, company, and stage. Use this to find contacts before updating them with Create or Update Contact or enrolling them with Add Contacts to Sequence. Thequeryparameter searches across name, title, company, and email. See the documentationRead-onlyv0.0.2
No Apollo triggers are available yet.
MULTI-APP
Use Apollo with other popular apps
Most products don't stop at one integration. Pair Apollo with the other apps your users rely on, and ship use cases that span both.
- App slug
- apollo_io_oauth
- Authentication
- OAuth
- Categories
- CRM
- Actions
- 10
- Triggers
- 0
- API proxy
- Available
OAuth scopes
These are the scopes Pipedream's managed Apollo OAuth client requests when one of your users connects an account. Supply your own OAuth client to request a different set.
- read_user_profile
- app_scopes
- people_match
- person_read
- opportunity_write
- opportunity_read
- opportunity_update
- contact_write
- contact_update
- contacts_search
- contact_stages_list
- account_write
- account_update
- accounts_search
- account_stages_list
- emailer_campaigns_search
- emailer_campaigns_add_contact_ids
- users_list
- email_accounts_list
- opportunity_stages_list