Affinity Integration

Affinity is the CRM of choice for a large share of venture firms, but the deck itself rarely makes it onto the record. There’s no native DeckExtract app to install — the integration is the DeckExtract API plus Affinity’s own API. This guide walks the full setup: convert an inbound DocSend or Papermark link to a PDF, then file it on the matching organization or opportunity — directly via the API or through a no-code tool.

The flow: inbound DocSend/Papermark link → DeckExtract API → PDF → Affinity entity-file attachment (+ optional note) on the matching organization or opportunity.

1. Extract the deck

A single call returns the PDF download link and, on the Pro plan with analyze: true, the structured analysis. Use a shared fund alias for email so founders see a consistent viewer on gated links:

curl -X POST https://deckextract.com/api/v2/extract \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer dk_your_api_key" \
  -d '{
    "url": "https://docsend.com/view/abc123",
    "email": "deals@yourfund.com",
    "analyze": true
  }'

2. Attach it in Affinity

Affinity’s API uploads files as entity files against an organization, person, or opportunity. Download the PDF from the DeckExtract link, then post it to the matching record:

# 1) Download the PDF from the DeckExtract link
curl -L "<download.url from DeckExtract>" -o deck.pdf

# 2) Upload it as an entity file on the Affinity organization/opportunity
curl -X POST https://api.affinity.co/entity-files \
  -u ":YOUR_AFFINITY_API_KEY" \
  -F "organization_id=ORG_ID" \
  -F "file=@deck.pdf"

Add a note summarising the round so the highlights are visible without opening the file:

# Optional: add a note with the round summary from the analysis
curl -X POST https://api.affinity.co/notes \
  -u ":YOUR_AFFINITY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "organization_ids": [ORG_ID],
    "content": "Pitch deck archived. Stage: seed | Ask: $5M | ARR: $1.2M"
  }'

Affinity authenticates with HTTP Basic auth using your API key as the password (empty username) — hence the -u ":KEY". Use opportunity_id or person_id instead of organization_id to file against a different entity.

The no-code path

Most funds don’t write a service for this — they connect the two APIs in a tool they already run:

  • n8n, Zapier, or Make — trigger on a new email or Affinity row, call DeckExtract, push the PDF to Affinity
  • MCP server — an AI assistant fetches the deck and hands you the PDF to drop on the record

Related

The same approach works for any CRM with a file API — Attio, Salesforce, HubSpot, Notion. See all on the Integrations page.