Apollo ACTION
Create or Update Opportunity
Creates a new opportunity (deal) or updates an existing one in your Apollo CRM. To create, omit
opportunityId and provide name, opportunityStageId, closedDate, and accountId. To update, provide the opportunityId and any fields to change. Use Get Opportunity to fetch current details before updating. Use List Metadata (type opportunity_stages) to discover valid stage IDs, and Search Accounts to find account IDs. Use Get Current User to find owner IDs. See the documentation- Action
- Writes data
- OAuth
- SDK
- MCP
IMPLEMENTATION
Call this tool
Connect a user's Apollo account once, then configure and run Create or Update Opportunity from your backend or agent.
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-create-or-update-opportunity",
externalUserId: "{external_user_id}", // any stable ID for this user in your system
configuredProps: {
apollo_io_oauth: { authProvisionId: "apn_xxxxxxx" },
opportunityId: "Opportunity ID",
name: "Name",
},
})
console.log(result)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-create-or-update-opportunity",
"configured_props": {
"apollo_io_oauth": { "authProvisionId": "apn_xxxxxxx" },
"opportunityId": "Opportunity ID",
"name": "Name"
}
}'// 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()
// listTools() hands your model this tool's input schema, so it can
// fill the arguments itself:
const result = await mcp.callTool({
name: "apollo_io_oauth-create-or-update-opportunity",
arguments: {
opportunityId: "Opportunity ID",
name: "Name",
},
})SCHEMA
Inputs
Pipedream supplies the connected account. Your application provides the operation-specific values below. Dynamic inputs are resolved against that user's account.
| Property | Type | Description |
|---|---|---|
opportunityId Opportunity ID | string | The ID of an existing opportunity to update. Omit this to create a new opportunity. Optional |
name Name | string | The name of the opportunity/deal. Required when creating. Optional |
ownerId Owner ID | string | The user ID to assign as the deal owner. Use Get Current User or List Metadata (type users) to find user IDs. Optional |
amount Amount | integer | The monetary value of the deal. Example: 50000. Optional |
opportunityStageId Opportunity Stage ID | string | The pipeline stage for this deal. Use List Metadata (type opportunity_stages) to discover valid stage IDs. Required when creating. Optional |
closedDate Closed Date | string | The expected or actual close date. Format: YYYY-MM-DD. Example: "2025-06-30". Required when creating. Optional |
accountId Account ID | string | The account (company) linked to this deal. Use Search Accounts to find account IDs. Required when creating. Optional |
REFERENCE
Tool details
Behavior hints are published with the component in the Pipedream registry and surface as MCP tool annotations, so an agent can reason about a tool before it calls it.
- Registry key
- apollo_io_oauth-create-or-update-opportunity
- Version
- 0.0.2
- App
- Apollo
- Authentication
- OAuth
- Read-only
- No
- Destructive
- No
- Open world
- Yes
- Source
- View on GitHub ↗