Salesforce Integration
There’s no DeckExtract package on the AppExchange — the integration is the DeckExtract API plus the Salesforce REST API. Convert the deck once, then store it as a File on the Opportunity and populate custom fields from the analysis.
The flow: deck link → DeckExtract API → PDF → ContentVersion → ContentDocumentLink to the Opportunity, plus custom fields 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 and base64-encode it for the upload step. The analysis object (Pro-only) gives you the fields to map.
2. Store the file on the Opportunity
Salesforce Files use the ContentVersion → ContentDocument → ContentDocumentLink chain:
# 1) Upload the PDF as a Salesforce File (ContentVersion)
# VersionData is the base64 of the PDF you downloaded from download.url
curl -X POST \
https://YOUR_INSTANCE.my.salesforce.com/services/data/v60.0/sobjects/ContentVersion \
-H "Authorization: Bearer SF_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"Title": "Pitch deck — Acme (seed)",
"PathOnClient": "acme-deck.pdf",
"VersionData": "<base64 of the PDF>"
}'
# 2) Link the resulting ContentDocument to the Opportunity
curl -X POST \
https://YOUR_INSTANCE.my.salesforce.com/services/data/v60.0/sobjects/ContentDocumentLink \
-H "Authorization: Bearer SF_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"ContentDocumentId": "CONTENT_DOCUMENT_ID",
"LinkedEntityId": "OPPORTUNITY_ID",
"ShareType": "V"
}'Then map the structured fields onto the Opportunity (create the custom fields once in Setup first):
# Set custom fields on the Opportunity from the analysis object
PATCH /services/data/v60.0/sobjects/Opportunity/OPPORTUNITY_ID
{
"Round_Stage__c": "{{ analysis.round.stage }}",
"Raise_Amount__c": {{ analysis.round.amount.value }},
"ARR__c": {{ analysis.metrics.arr.value }}
} Custom field API names (__c) and the API version are specific to your org — adjust to match. For larger PDFs, use the multipart ContentVersion upload rather than inline base64.
The no-code path
Rather than calling the REST API yourself, wire it in an automation tool — each has a Salesforce connector for the write step:
Related
The same pattern applies to HubSpot, Attio, Affinity, and Notion. See the Integrations index and API docs.