Choosing a custom block over raw HTTP
A custom block is worth building when the integration has outgrown a single workflow. Each signal below points toward packaging the call once rather than re-creating it by hand:- The same HTTP action is reused across many workflows.
- Non-technical operators need a friendly configuration form, not a raw URL and headers field.
- Authentication should be stored and refreshed once, not pasted into headers on every workflow.
- The block needs typed inputs and outputs so downstream blocks can consume its results reliably.
- The integration could become a reusable product you ship to more than one workspace.
Staying with HTTP requests
Most integrations never need a custom block. The Send HTTP request block costs 1 credit per call, ships today, and handles every case below without any SDK work:- The workflow is a one-off.
- The payload is simple enough to assemble inline.
- The operator configuring it is technical and comfortable with headers and JSON.
- You are still validating demand before investing in an app.
Send HTTP request enforces a two-minute timeout, and Execute code enforces a 100-second timeout. A custom block does not turn a slow integration into a fast one. Design around these limits rather than expecting an SDK wrapper to escape them.
Promoting a proven pattern to a block
Build the manual version first. Watch it survive contact with real data. Only then turn it into a custom block. The steps below take a working HTTP integration through to a reusable block.1
Ship the manual HTTP pattern
Build the integration with Send HTTP request, Parse JSON, and Execute code inside a normal workflow. For an enrichment call triggered by Webhook received, this is the full pattern you would otherwise wire by hand for every customer.
2
Confirm the pattern recurs
Watch for the same call across workspaces. Say you run an enrichment lookup for
acme.com and a dozen other domains. When that identical request appears in several customer workspaces with only the URL or API key changing, you have a candidate worth packaging.3
Define the block's typed inputs and outputs
Decide what the operator supplies and what the block returns. An enrichment block might take a
domain input such as acme.com and return typed outputs like company_name, employee_count, and enriched_at. Downstream blocks then consume named fields instead of re-parsing raw JSON.4
Move authentication into the block
Store the credential once at the block level rather than in a workflow header. Picture Priya Sharma in revenue operations adding the block. She selects a connection instead of pasting an API key, and the secret never appears in a workflow configuration.
5
Hand the result downstream
Feed the block’s typed outputs into the same blocks the manual pattern used, such as Create or update record. Because the outputs are typed, the mapping stays stable even as you revise the block’s internals.
Spotting good first candidates
Several recurring go-to-market (GTM) jobs are good first candidates once the manual pattern is proven:- Enrichment provider actions that turn a domain into firmographics.
- LinkedIn and company research helpers.
- Outbound campaign tools that push contacts into a sending platform.
- Lead-scoring blocks that wrap a fixed model behind a simple input.
- Data-hygiene blocks that normalize fields on write.