n8n Template

n8n Workflow for Meta Ads Bulk Upload

What an n8n pipeline into the Meta API must handle: creation order, async video upload, rate limits, partial failure recovery. Template included.

Updated

Access this resource for free

By submitting, you agree to our privacy policy.

Wiring n8n into Meta’s Marketing API to push creatives in bulk is doable, but four API constraints decide whether the pipeline holds. They are explained below. The importable node graph lives in the Notion documentation, sent by email.

Prerequisites

  • A Meta app with the ads_management permission.
  • A long-lived access token. A short user token expires after a few hours and will break the workflow in the middle of the night.
  • The ad account ID, in act_<id> form.
  • An associated Facebook page, required to create a creative.

Constraint 1: the creation order is not negotiable

The API imposes three steps, in this order, and each returns an ID the next one needs:

  1. Upload the media and get its identifier: an image_hash for an image, a video_id for a video.
  2. Create the AdCreative, referencing that identifier, the page, the link and the copy.
  3. Create the Ad, referencing the AdCreative and the destination ad set.

A pipeline that tries to create the ad before the creative fails every time. It is the number one cause of failure in homemade workflows.

Constraint 2: videos are processed asynchronously

An image is usable right after upload. A video is not: Meta queues it for processing, and the ID exists before the video is ready.

So the workflow has to poll the processing status and wait for it to finish before creating the creative. Without that wait, creation fires with a video that is not ready and the call fails intermittently, which is the worst case to debug.

That is what the template’s wait node does: a polling loop with an interval, not a fixed delay.

Constraint 3: rate limits

The API applies rate limits per app and per ad account. Firing fifty creatives at once hits them.

Two reflexes:

  • Process serially or in small batches, not in parallel across fifty branches.
  • Retry on 429 with a growing delay, and do not confuse a rate limit with a data error. A 429 is retryable, a 400 is not.

Constraint 4: failure must be partial, not total

On a batch of thirty creatives, one failure must not cancel the other twenty-nine. The workflow has to keep a log of what went through and what failed, with the API error message, otherwise you relaunch everything blind.

What this workflow does not do

It does not detect your formats and it does not read your naming convention: it pushes what you give it, named the way you named it. Preparing the files stays manual upstream.

It also does not turn off Advantage+ creative by creative. That setting is applied when the AdCreative is created and has to be explicitly included in the request body, otherwise you inherit Meta’s default.

Finally, it assumes you maintain the workflow. Every Marketing API version change can break a call: that is the real cost of a homemade pipeline, and it should be accepted before choosing this route over a tool.

Going further

The full reasoning on bulk upload, without n8n, is in the Meta Ads bulk upload guide. The naming convention to apply upstream is here.

Talk to Founder