HubSpot Integration

There’s no DeckExtract app in the HubSpot marketplace — the integration is the DeckExtract API plus HubSpot’s own APIs. Convert the deck once, upload it to Files, attach it to the Deal, and set Deal properties from the analysis.

The flow: deck link → DeckExtract API → PDF → HubSpot Files → Note (with attachment) associated to the Deal, plus Deal properties from analysis.

1. Extract the deck

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", "analyze": true }'

Download the PDF from download.url; the analysis object (Pro-only) gives you the property values.

2. Attach it to the Deal

# 1) Upload the PDF (downloaded from download.url) to HubSpot Files
curl -X POST https://api.hubapi.com/files/v3/files \
  -H "Authorization: Bearer HUBSPOT_PRIVATE_APP_TOKEN" \
  -F "file=@deck.pdf" \
  -F 'folderPath=/decks' \
  -F 'options={"access":"PRIVATE"}'

# 2) Create a Note with the file attached, associated to the Deal
curl -X POST https://api.hubapi.com/crm/v3/objects/notes \
  -H "Authorization: Bearer HUBSPOT_PRIVATE_APP_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "properties": {
      "hs_note_body": "Pitch deck archived. Stage: seed | Ask: $5M | ARR: $1.2M",
      "hs_attachment_ids": "FILE_ID"
    },
    "associations": [{
      "to": { "id": "DEAL_ID" },
      "types": [{ "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 214 }]
    }]
  }'

Then write the structured fields onto the Deal (create the custom properties once in HubSpot settings):

# Set Deal properties from the analysis object
PATCH https://api.hubapi.com/crm/v3/objects/deals/DEAL_ID
{
  "properties": {
    "round_stage":  "{{ analysis.round.stage }}",
    "raise_amount": "{{ analysis.round.amount.value }}",
    "arr":          "{{ analysis.metrics.arr.value }}"
  }
}

Use a private app token with the files, crm.objects.deals.write scopes. The note↔deal associationTypeId and property internal names depend on your portal — confirm against your own schema.

The no-code path

Wire it in an automation tool — each has a HubSpot connector:

  • n8n — HTTP Request to DeckExtract, then the HubSpot node
  • Zapier or Make — call DeckExtract, then the HubSpot app

Related

The same pattern applies to Salesforce, Attio, Affinity, and Notion. See the Integrations index and API docs.