Make Tutorial8 min readJuly 13, 2026

Connect HeyGen to Your CRM with Make (Formerly Integromat)

By Umar Asghar, AI Integration Engineer - July 13, 2026

TL;DR

Make works well for HeyGen automation under 50 videos a day. This guide builds the full scenario: CRM trigger, render call, async polling, error handling, and CRM write-back. It also covers the three failure modes Make cannot fix on its own, and the point at which per-operation pricing and scenario timeouts push you toward custom code.

What You Need Before You Start

You need a Make account on the Core plan or above (the Free plan’s 1,000 operations per month is not enough for live video rendering), a HeyGen account on Creator or above with API access enabled, and a CRM that Make can connect to. This guide uses HubSpot for the trigger and write-back modules, with notes on swapping to other CRMs.

Before building the scenario, go into your HeyGen dashboard and confirm two things: the avatar ID you plan to use is active, and the template variables match what you will pull from the CRM. Mismatched variable names produce blank fields in the output video - no error, just silent bad output.

Step 1: Set Up the CRM Trigger Module

Create a new scenario in Make. For HubSpot, add the HubSpot - Watch Deals module as the trigger. Set it to watch for stage changes and select the pipeline and stage you want to act on. Connect your HubSpot account when prompted.

If your CRM is not in the Make app library, use a Webhooks - Custom Webhook module instead. Copy the generated webhook URL, add it to your CRM’s outbound webhook settings, and Make will receive the payload and map the fields. This approach works for Pipedrive, ActiveCampaign, Close, and any CRM that supports outbound webhooks.

After the trigger, add a Router module with two paths: one for records that have all required personalization fields populated, one for records that are missing fields. Route incomplete records to a Slack notification or an email alert rather than passing them into the render path.

Step 2: Call HeyGen via the HTTP Module

Add an HTTP - Make a Request module. Set Method to POST and URL to https://api.heygen.com/v2/video/generate. Under Headers add X-Api-Key with your HeyGen API key. Set Body Type to Raw and Content Type to JSON. The body structure:

{

  “video_inputs”: [{

    “character”: {

      “type”: “avatar”,

      “avatar_id”: “YOUR_AVATAR_ID”,

      “avatar_style”: “normal”

    },

    “voice”: {

      “type”: “text”,

      “input_text”: “Hi {{first_name}}, looking forward to working with {{company}}.”},

      “voice_id”: “YOUR_VOICE_ID”

    }

  }],

  “variables”: {

    “first_name”: {

      “name”: “first_name”, “type”: “text”,

      “properties”: { “content”: “{{1.firstname}}” }

    },

    “company”: {

      “name”: “company”, “type”: “text”,

      “properties”: { “content”: “{{1.company}}” }

    }

  },

  “dimension”: { “width”: 1280, “height”: 720 },

  “test”: true

}

The {{1.firstname}} notation is Make’s field mapping syntax - replace the field names with whatever your trigger module exposes. Enable Parse Response in the module settings so Make automatically maps the response JSON. The value you need from the response is data.video_id. Keep test: true until you have verified output on two or three real records.

Step 3: Handle Async Rendering in Make

HeyGen renders do not complete instantly. After the render POST, add a Sleep module set to 60 seconds, then an HTTP module that polls the status endpoint. Use a Repeater module to loop up to 10 times:

  1. Add a Repeater module. Set maximum repetitions to 10.
  2. Inside the repeater, add a Sleep module - 30 seconds.
  3. Add an HTTP - Make a Request module: GET https://api.heygen.com/v1/video_status.get?video_id={"{{"}video_id{"}}"} with the same X-Api-Key header.
  4. Add a Break module after the HTTP module with the condition: data.status equals completed or failed.

After the repeater exits, add a Router that checks the final status value. Route completed to the write-back path and failed or still-processing to the error path.

One limitation to know upfront: Make’s Sleep module holds the scenario execution open. At higher volumes this fills your active execution slots. If you are running more than 20 renders concurrently, switch to HeyGen’s webhook-based completion - register via POST /v1/webhook/endpoint.add and point the callback URL at a second Make scenario that handles the write-back.

Step 4: Add Error Handling in Make

Make’s default behavior on a non-200 response is to stop the scenario execution and mark it as failed. That means a dropped render with no record of what was lost. Add two layers of handling.

Error Handler module on the HeyGen HTTP node

Right-click the HTTP module that calls /v2/video/generate and add an Error Handler. On a 429 response, use the Resume directive after a 10-second sleep to retry. On a 4xx response that is not 429, route to a Slack notification with the error body - these usually indicate a bad avatar ID or malformed payload and are not retryable.

Fallback route on the status router

If the repeater exits without a completed status (render failed or timed out), the fallback route should log the video_id and CRM record ID to a Make data store or an Airtable row so you can manually investigate. Do not silently discard failed renders - the CRM record still exists expecting a video note.

Scenario-level error notification

In Make scenario settings, enable “Send an email when a scenario fails” or connect a Slack notification. This catches errors at the scenario level that your module-level handlers did not catch - scenario timeouts, credential expiry, and Make platform outages.

Step 5: Write the Video URL Back to Your CRM

After the successful completion branch of the router, add a HubSpot - Update a Contact Record module (or the deal equivalent). Map the data.video_url field from the status response to a custom CRM property you created for the video link.

If your CRM does not have a native Make module for the write-back, use an HTTP - Make a Request module with a PATCH or POST to the CRM’s REST API. For Pipedrive this is POST /v1/notes with the deal_id and the video URL in the content field. For Salesforce it is a PATCH to /services/data/vXX.0/sobjects/Contact/ID.

Include the render date in whatever field or note you write. HeyGen URLs expire after 7 days. If a rep opens the CRM record two weeks later and clicks a dead link, they will assume the integration is broken - which is worse than no integration.

The Ceiling: Where Make Stops Working Well

Three things constrain Make for HeyGen at volume, and they compound each other.

Per-operation pricing at volume. A single render run costs 5 to 8 Make operations. At 50 videos a day that is roughly 10,000 to 12,000 operations per month - the entire Core plan’s allowance, spent on one scenario. The Pro plan at 10,000 operations is similarly tight. At this point you are paying Make more per render than the HeyGen API costs.

Scenario timeouts on slow renders. Make scenarios have a 40-minute hard timeout. A single render will not hit it, but if HeyGen is slow or your polling loop runs the full 10 iterations, you are sitting at 5 to 8 minutes per execution. Concurrent renders on a busy day stack those timeouts and start killing executions.

No managed retry queue. Make’s error handling is per-scenario and stateless. If a render fails and your error handler is not perfectly configured, the job is gone. Custom code with a database-backed queue gives you dead-letter storage, retry visibility, and aggregate failure-rate monitoring - none of which Make can provide natively.

When to Move to Custom Code

Move off Make when any of these are true: you are generating more than 50 videos per day, you need a delivery SLA with guaranteed retry and dead-letter queuing, you need aggregate monitoring of render success rates, or your Make operation bill is approaching the cost of a small server or serverless function.

The migration is not a rewrite. The HeyGen API calls are identical. What changes is the orchestration layer - a queue (SQS, BullMQ, or similar), a worker process that handles the polling loop, and a monitoring dashboard. Make is a good place to validate the integration before investing in that infrastructure.

Already Hitting Make’s Limits? Start with a Pipeline Audit

If your Make scenario is dropping renders, timing out, or costing more than expected, the Pipeline Audit maps where the bottleneck is and what a production-grade replacement looks like. 30 minutes, no commitment, yours to keep regardless of what you build next.

Get your Pipeline Audit

FAQ

Does Make have a native HeyGen module?

No. You use Make's HTTP module (Make a Request) with your HeyGen API key passed as an X-Api-Key header. There is no official HeyGen app in the Make marketplace as of mid-2026. Store your key in a Make connection or environment variable - do not paste it directly into module fields.

What happens if the HeyGen render takes longer than Make's scenario timeout?

Make scenarios time out after 40 minutes by default on most plans. A standard avatar video renders in 1 to 5 minutes, so a single render will not hit that limit. The risk is a polling loop that runs too many iterations waiting on a slow render or a stuck job. Cap your repeater at 10 iterations and route anything still processing to an error path rather than letting the scenario run to timeout.

Can I use this with Salesforce, Pipedrive, or ActiveCampaign instead of HubSpot?

Yes. Replace the HubSpot trigger module with whatever CRM trigger Make supports for your platform. The HeyGen HTTP modules in Steps 2 and 3 are identical regardless of CRM. The write-back in Step 5 changes to whichever update module your CRM provides - Salesforce Update Record, Pipedrive Update Deal, and so on.

How do Make's per-operation costs add up at volume?

Make charges per operation, and a single HeyGen render run consumes roughly 5 to 8 operations: the trigger, the render POST, the sleep, the status GET, the CRM write, and any router or filter steps. At 50 videos a day that is 250 to 400 operations daily, or 7,500 to 12,000 per month. Check your plan's included operations - Core includes 10,000/month, which can disappear fast at moderate volume.

ABOUT THE AUTHOR

Umar Asghar is the CTO of Kastiv. He builds production AI video and API integration pipelines.