# Create or Update Opportunity — Apollo

> 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…

- Key: `apollo_io_oauth-create-or-update-opportunity`
- Type: Action (Write)
- Version: 0.0.2
- App: Apollo (`apollo_io_oauth`) — https://pipedream.com/apps/apollo-io-oauth.md
- This page (HTML): https://pipedream.com/apps/apollo-io-oauth/actions/create-or-update-opportunity
- Hints: open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/apollo_io_oauth/actions/create-or-update-opportunity/create-or-update-opportunity.mjs

## Description

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](https://docs.apollo.io/reference/create-opportunity)

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `opportunityId` | `string` | No | The ID of an existing opportunity to update. Omit this to create a new opportunity. |
| `name` | `string` | No | The name of the opportunity/deal. Required when creating. |
| `ownerId` | `string` | No | The user ID to assign as the deal owner. Use Get Current User or List Metadata (type users) to find user IDs. |
| `amount` | `integer` | No | The monetary value of the deal. Example: 50000. |
| `opportunityStageId` | `string` | No | The pipeline stage for this deal. Use List Metadata (type opportunity_stages) to discover valid stage IDs. Required when creating. |
| `closedDate` | `string` | No | The expected or actual close date. Format: YYYY-MM-DD. Example: "2025-06-30". Required when creating. |
| `accountId` | `string` | No | The account (company) linked to this deal. Use Search Accounts to find account IDs. Required when creating. |

## Run it

**MCP**

```ts
import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
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 accessToken = await pd.rawAccessToken

const transport = new StreamableHTTPClientTransport(
  new URL("https://remote.mcp.pipedream.net/v3"),
  {
    requestInit: {
      headers: {
        Authorization: `Bearer ${accessToken}`,
        "x-pd-project-id": process.env.PIPEDREAM_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",
  },
})
```

**TypeScript**

```ts
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**

```bash
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"
    }
  }'
```

---

- App: https://pipedream.com/apps/apollo-io-oauth.md · All apps: https://pipedream.com/apps
