Marketing · n8n

Sync Zendrop US-Only Products to Your Facebook Catalog Automatically

Pulls US-only products from Zendrop via API and pushes them directly into a Facebook Product Catalog so your ads always reflect your latest inventory. No manual CSV exports or copy-paste required.

difficulty Intermediatesetup 45 minresult A scheduled workflow that fetches US-only Zendrop products and upserts them into your Facebook Commerce Catalog, keeping your dynamic ads fresh and accurate.
  1. 1

    Step 1 – Schedule the sync trigger

    Add a Schedule Trigger node. Set Trigger Interval to Hours and Hours Between Triggers to 6 so the catalog refreshes four times a day. You can adjust this to daily if your product list changes slowly.

  2. 2

    Step 2 – Fetch US-only products from Zendrop

    Add an HTTP Request node named Get Zendrop US Products. Set Method to GET and URL to https://api.zendrop.com/v1/products?country=US&limit=100. In the Headers section add Authorization with value Bearer YOUR_ZENDROP_API_KEY. In the node's Notes field paste your API key reminder. The response returns a JSON array of product objects under the data key.

  3. 3

    Step 3 – Map product fields to Facebook format

    Add a Set node named Map to FB Format. Enable Keep Only Set and add these fields: id mapped to {{ $json.id }}, title to {{ $json.name }}, description to {{ $json.description }}, price to {{ $json.price }} USD, link to {{ $json.url }}, image_link to {{ $json.image_url }}, availability to in stock, condition to new, and brand to {{ $json.brand }}. This shapes each item to match Facebook's required product feed schema.

  4. 4

    Step 4 – Push products to Facebook Catalog

    Add an HTTP Request node named Push to FB Catalog. Set Method to POST and URL to https://graph.facebook.com/v19.0/YOUR_CATALOG_ID/items_batch. Set Body Content Type to JSON and paste this body: { "access_token": "YOUR_FB_PAGE_ACCESS_TOKEN", "item_type": "PRODUCT_ITEM", "requests": [ { "method": "UPSERT", "data": { "id": "{{ $json.id }}", "title": "{{ $json.title }}", "description": "{{ $json.description }}", "price": "{{ $json.price }}", "link": "{{ $json.link }}", "image_link": "{{ $json.image_link }}", "availability": "{{ $json.availability }}", "condition": "{{ $json.condition }}", "brand": "{{ $json.brand }}" } } ] }. Replace YOUR_CATALOG_ID with the numeric ID from Facebook Commerce Manager and YOUR_FB_PAGE_ACCESS_TOKEN with a long-lived System User token. Store the token in n8n Credentials for security.

  5. 5

    Step 5 – Verify response with a conditional check

    Add an IF node named Check Success. Set Condition to String and check that {{ $json.handles[0].status }} equals OK. The true branch means all items were accepted. Wire the false branch to a notification node (e.g. email or Slack) in a future iteration to alert you of failures.

Frequently asked questions

How do I find my Facebook Catalog ID?

Go to Facebook Commerce Manager at business.facebook.com/commerce, select your catalog, then click Settings. The Catalog ID is displayed at the top of the page. Copy that numeric string and replace YOUR_CATALOG_ID in the workflow URL.

What Zendrop plan gives API access and where do I get my API key?

Zendrop API access is available on paid plans (Plus and above). Log into your Zendrop dashboard, navigate to Settings > API, and generate a key. Treat it like a password and store it in n8n's built-in Credentials store rather than hard-coding it in the node.

The Facebook API only accepts batches of up to 1,000 items — what if I have more products?

Add a `Split In Batches` node between the Set node and the Push node, configured with a `Batch Size` of 1000. This automatically chunks the array and fires a separate API call per batch, staying within Facebook's limits.

About this recipe. Recipes on FlowRecipesHub are written for business owners, not developers, and are tested before publishing — how recipes get made. Some ingredient links are affiliate links that cost you nothing — full disclosure.