Skip to main content

Integrately

Prerequisites

  • A PolyDoc account and API key - sign up for free, no credit card required. The free plan includes 150 PDF conversions per month.
  • An Integrately account - sign up for free, no credit card required. Building and testing the flow works on the Trial plan; activating an automation requires Integrately Premium (the Webhook / API Integration action is a paid feature).

Use Case 1: Invoice PDFs from a Spreadsheet

Generate an invoice PDF whenever a new row is added to Google Sheets, then deliver it however you like.
Google Sheets (new row) → Webhook / API Integration (PolyDoc API) → your delivery action

Prepare your spreadsheet

Integrately's Trial / Starter / Pro tiers don't expose a Google Sheets Search Rows action or a Code step, so the two-sheet invoices + invoice_items layout used in other tool guides can't be reassembled into a nested array on these tiers. Use a single sheet instead - one row per invoice, with the line items pre-rendered as a JSON array in an items_json column. Example columns:

invoice_numberinvoice_dateinvoice_due_dateinvoice_subtotalinvoice_tax_rateinvoice_tax_amountinvoice_totalcustomer_namecustomer_emailcustomer_streetcustomer_citycustomer_countryitems_json
INV-2026-0012026-01-152026-02-1412000.11201320John Doejohn.doe@example.com456 Customer AvenueBeautiful CityUK[{"quantity":1,"name":"Web Design Services",...}, ...]

Full items_json cell value for the sample row above (paste it as-is into the cell - yes, including the outer square brackets):

[
{"quantity":1,"name":"Web Design Services","description":"Custom website design and development for company homepage","price":800},
{"quantity":1,"name":"Logo Design","description":"Professional logo design with 3 revision rounds","price":300},
{"quantity":1,"name":"SEO Optimization","description":"Search engine optimization for 10 target keywords","price":100,"original_price":150}
]

Activate the template and connect Google Sheets

In Integrately click Google Sheets as App 1 and Webhook / API Integration as App 2. The matching templates list appears below - pick:

Use AI to automatically Send data to a URL in Webhook / API Integration when Spreadsheet row is created in Google Sheets

and click Activate. Integrately walks you through a four-stage Connect Accounts wizard:

  • Stage 1 - Google Sheets: click Sign in to Google Sheets and on the consent screen enable all three permissions Integrately requests (read Drive files, read/write the specific files, read/write Sheets data). Pick the spreadsheet from Step 1 and the worksheet that holds your invoice rows.
  • Stage 2 - Dappier: this is the AI middleman the template injects. Click Skip Wizard in the top-right (or finish later) - we'll delete this step in Step 3.
  • Stage 3 - Webhook / API Integration: nothing to connect, this app uses inline credentials. Click through.
  • Stage 4 - Customize & Live: dismiss; we'll finish configuration in the flow editor.
app.integrately.com

Configure the trigger and strip the AI middleman

After the wizard, Integrately drops you into the flow editor with three steps: 1. Spreadsheet row trigger, 2. Real time search in Dappier (the AI middleman), 3. Send data to a URL in Webhook / API Integration.

First, finish the trigger: open Step 1, set Select Spreadsheet to your invoices file and Select Worksheet to your sheet (Integrately shows worksheets by their internal sheetId rather than name - the first sheet is always 0). Click Get Latest Record so Integrately pulls a real row and exposes every column (invoice_number, customer_name, items_json, …) for mapping in Step 4.

Then delete the AI middleman: hover over Step 2 ("Real time search in Dappier"), click the Delete icon in the step header, and confirm Yes Delete. The flow collapses to a clean two-step chain: Sheets trigger → Webhook / API action.

app.integrately.com

Configure the PolyDoc HTTP request

Open the remaining action step (Send data to a URL in Webhook / API Integration) and set the fields:

  • Method: POST
  • Need to send nested data?: Yes - this is the toggle that switches the body builder from a flat key/value table to a raw JSON textarea. Without it, the templateData object and items array can't be expressed.
  • URL: https://api.polydoc.tech/pdf/convert
  • Headers - three rows (use the + Add button under the Headers section to add each):
    • AuthorizationBearer YOUR_API_KEY (from the Dashboard)
    • Content-Typeapplication/json
    • X-Sandbox true (watermarked, doesn't count against your quota; drop the header when you're ready for production)
  • Unflatten: Yes (Integrately's default - it preserves the nested object shape on the wire).
app.integrately.com

Paste the canonical body into Body / Data, then replace each literal value with the matching trigger column (click the field, then pick the corresponding Step 1 → <column> entry from the field picker Integrately pops on the right). The skeleton:

{
"source": "[template:YOUR_TEMPLATE_ID]",
"templateData": {
"invoice_number": "{{Step 1: invoice_number}}",
"invoice_date": "{{Step 1: invoice_date}}",
"invoice_due_date": "{{Step 1: invoice_due_date}}",
"invoice_subtotal": {{Step 1: invoice_subtotal}},
"invoice_tax_rate": {{Step 1: invoice_tax_rate}},
"invoice_tax_amount": {{Step 1: invoice_tax_amount}},
"invoice_total": {{Step 1: invoice_total}},
"customer_name": "{{Step 1: customer_name}}",
"customer_email": "{{Step 1: customer_email}}",
"customer_street": "{{Step 1: customer_street}}",
"customer_city": "{{Step 1: customer_city}}",
"customer_country": "{{Step 1: customer_country}}",
"items": {{Step 1: items_json}}
}
}
app.integrately.com

Test and activate

Click Test It at the bottom of the Webhook step. Integrately POSTs the assembled body to api.polydoc.tech/pdf/convert and waits for the response; a successful run flips the button to Retest and surfaces a See test result link. The response panel on the right then lists every field PolyDoc returned - Status Code (200), Response | ContentDisposition | File Name, etc. - ready to map in any delivery step you add (Gmail attachment, Slack file upload, S3 upload via a second Webhook, …).

Hit Save. Activation requires Integrately Premium - Trial accounts can re-test the flow on demand but the Activate toggle on /my-automations is gated. When you upgrade, remove the X-Sandbox header first so production runs render watermark-free and count against your paid PolyDoc quota rather than the sandbox.

app.integrately.com

Use Case 2: Webhook-Triggered PDF Generation

Accept invoice data from any source (custom form, third-party app, your own backend) via an Integrately catch URL, generate the PDF, and pass it on.
Webhook / API Integration (incoming) → Webhook / API Integration (PolyDoc API) → your delivery action

Set up the webhook trigger

Integrately has no pure "Webhook → Webhook" ready automation, so activate one that starts with a Webhook trigger and trim the rest. From /explore-automations select Webhook / API Integration twice as App 1 and App 2, then activate any template that begins with When Operation is created/performed in Webhook / API Integration (e.g. the Webhook → Google Sheets row template).

In the flow editor, delete every step after the trigger (hover each step, click Delete, confirm), then add a Send data to a URL in Webhook / API Integration action via the + Add Filter / Condition / App button below the trigger. The chain ends as: 1. Operation is performed in Webhook / API Integration → 2. Send data to a URL in Webhook / API Integration.

The trigger's Connect Accounts screen shows a unique catch URL like https://webhooks.integrately.com/a/webhooks/<your-key> - copy it. Anything that POSTs JSON to this URL fires the automation.

app.integrately.com

Send test data to the webhook

Send a sample POST to the catch URL so Integrately learns the incoming field shape. From your terminal:

curl -X POST '<your-catch-url>' \
-H 'Content-Type: application/json' \
--data-raw '{
"invoice_number": "INV-2026-001",
"invoice_date": "2026-01-15",
"invoice_due_date": "2026-02-14",
"invoice_subtotal": 1200,
"invoice_tax_rate": 0.1,
"invoice_tax_amount": 120,
"invoice_total": 1320,
"customer_name": "John Doe",
"customer_email": "john.doe@example.com",
"customer_street": "456 Customer Avenue",
"customer_city": "Beautiful City",
"customer_country": "UK",
"items": [
{"quantity":1,"name":"Web Design Services","description":"…","price":800},
{"quantity":1,"name":"Logo Design","description":"…","price":300},
{"quantity":1,"name":"SEO Optimization","description":"…","price":100,"original_price":150}
]
}'

Back in Integrately, click Get Latest Record on the trigger - the request you just sent is listed with every field ready to bind.

app.integrately.com

Configure the PolyDoc HTTP request

Configure the action step exactly like Use Case 1 Step 4 (Method POST, Need to send nested data Yes, URL https://api.polydoc.tech/pdf/convert, Authorization / Content-Type / X-Sandbox headers, Unflatten Yes). The only difference is the body - bind directly to the trigger fields instead of sheet columns:

{
"source": "[template:YOUR_TEMPLATE_ID]",
"templateData": {
"invoice_number": "{{Step 1: invoice_number}}",
"invoice_date": "{{Step 1: invoice_date}}",
"invoice_due_date": "{{Step 1: invoice_due_date}}",
"invoice_subtotal": {{Step 1: invoice_subtotal}},
"invoice_tax_rate": {{Step 1: invoice_tax_rate}},
"invoice_tax_amount": {{Step 1: invoice_tax_amount}},
"invoice_total": {{Step 1: invoice_total}},
"customer_name": "{{Step 1: customer_name}}",
"customer_email": "{{Step 1: customer_email}}",
"customer_street": "{{Step 1: customer_street}}",
"customer_city": "{{Step 1: customer_city}}",
"customer_country": "{{Step 1: customer_country}}",
"items": {{Step 1: items}}
}
}
app.integrately.com

Test and activate

Click Test It on the Webhook action. With the body correctly bound, PolyDoc returns HTTP 200 and the response panel exposes Status Code, Response | ContentDisposition | File Name, etc. Add whatever delivery you need as a third step (Gmail attachment, Slack file upload, S3 upload via a second Webhook), then hit Save.

Like UC1, the green Activate toggle on /my-automations requires Integrately Premium - Trial accounts can fire the flow manually via Test It but external callers can't drive it until you upgrade. Remove the X-Sandbox header before going live.

app.integrately.com