Webflow Integration with External Services via API and Zapier
Imagine: you have a beautiful Webflow site with forms, a blog, and a catalog, but all orders and leads have to be manually copied into your CRM. Or products are updated from an ERP, and you spend hours exporting and importing CSV files. Sound familiar? We solve this using the Webflow API and Zapier — we set up automatic synchronization so data flows between systems without human intervention. Over 10 years, we have completed more than 50 such integrations for clients in e-commerce, SaaS, and education.
Webflow provides a full REST API v2 supporting CMS collections, forms, orders, and content publishing. The API is documented, works over standard HTTP, and authentication uses a bearer token. The limit is 60 requests per minute, sufficient for most scenarios. For mass operations, we use a queue and batching.
Our specialists can handle any task: from simple form integration to two-way synchronization with tens of thousands of products. If you are unsure which approach suits you, get a consultation — we will assess your project and offer the optimal solution.
How Webflow API Authentication Works
Webflow supports two authentication methods: API Token (personal key) and OAuth 2.0 (for public applications). For your own site, an API token is usually sufficient. The token is generated in the "Account Settings" → "API Access" section. The token is passed in the Authorization: Bearer <token> header. Example in PHP:
$client = Http::withHeaders([ 'Authorization' => 'Bearer ' . config('services.webflow.token'), 'accept' => 'application/json', ]); // List sites $sites = $client->get('https://api.webflow.com/v2/sites')->json('sites'); // Collections for a specific site $collections = $client ->get("https://api.webflow.com/v2/sites/{$siteId}/collections") ->json('collections'); OAuth 2.0 is needed if your application should work with accounts of different Webflow users. The process is standard: redirect to Webflow, get a code, exchange for a token.
What’s Included in the Integration: Checklist
| Stage | Action | Result | Timeline |
|---|---|---|---|
| Analysis | Identify integration points (forms, orders, CMS) | Data schema | 2–4 hours |
| Design | Choose method: API or Zapier | Solution architecture | 1 day |
| Development | Write code, set up webhooks, synchronization | Working prototype | 1–3 days |
| Test | Verify all scenarios | Test report | 1 day |
| Deploy | Launch to production | Ready functionality | 2 hours |
We guarantee stability: after delivery, we provide integration documentation and 2 weeks of free support.
Working with CMS Collections: Creation and Publishing
Adding an item to a collection (e.g., a new job posting or article from an external system):
$response = Http::withHeaders([ 'Authorization' => 'Bearer ' . config('services.webflow.token'), 'Content-Type' => 'application/json', ])->post("https://api.webflow.com/v2/collections/{$collectionId}/items", [ 'fieldData' => [ 'name' => 'New Article', 'slug' => 'new-article', 'description' => 'Article text...', 'published-on' => '2025-01-15T10:00:00Z', '_archived' => false, '_draft' => false, ], ]); $itemId = $response->json('id'); // After creation, the item is in draft. To publish, a separate request is needed: Http::withHeaders([ 'Authorization' => 'Bearer ' . config('services.webflow.token'), ])->post("https://api.webflow.com/v2/collections/{$collectionId}/items/publish", [ 'itemIds' => [$itemId], ]); API v2 limits: 60 requests per minute per token. For mass operations, add a delay or batching.
Why Use Webhooks Instead of Polling?
Webflow can send events to an external URL. Available triggers: form_submission, site_publish, ecomm_new_order, ecomm_order_changed, cms_item_created, cms_item_changed, cms_item_deleted. This is faster and more reliable than polling the API every 15 minutes via Zapier.
Registering a webhook via API:
Http::withHeaders([ 'Authorization' => 'Bearer ' . config('services.webflow.token'), 'Content-Type' => 'application/json', ])->post("https://api.webflow.com/v2/sites/{$siteId}/webhooks", [ 'triggerType' => 'form_submission', 'url' => 'https://yoursite.com/api/webhooks/webflow', ]); Webflow signs requests with the X-Webflow-Signature header (HMAC-SHA256). Signature verification is mandatory for security.
Real case: On one e-commerce project, we replaced manual CRM entry with a direct API webhook, reducing lead processing time from 8 seconds to 1.2 seconds. The client’s team stopped copying data and errors dropped to zero.
How to Set Up Zapier for Quick Integration?
Zapier has an official Webflow connector. It allows you to link Webflow events with thousands of services: Google Sheets, HubSpot, Mailchimp, Slack, Notion, and more. A typical zap: "New Webflow form → lead in HubSpot":
- Trigger: "Webflow → New Form Submission" — select site and form
- Action: "HubSpot → Create Contact" — field mapping
- (Optional) Filter: only if the
emailfield is not empty
Zapier is polling-based for Webflow: it checks for new submissions every 15 minutes. For urgent notifications, use a direct webhook — it is 3 times faster.
An alternative to Zapier for more complex flows is n8n (self-hosted). It supports Webflow through HTTP nodes and offers more flexible data transformation logic without operation limits.
API vs Zapier for Integration
| Criterion | Direct API | Zapier |
|---|---|---|
| Latency | Instant (webhook) | Up to 15 minutes (polling) |
| Flexibility | Full control | Limited by ready triggers |
| Complexity | Requires development | No code |
| Cost | Free (API limits) | From $20/month (Zapier plan) |
If you hesitate in choosing, order a consultation — we will select the optimal solution for your budget.
Syncing CMS with an External Database: Pattern
Pattern for syncing a product catalog from an ERP to Webflow CMS:
class SyncProductsToWebflow { public function handle(): void { $products = Product::where('updated_at', '>', $this->lastSync())->get(); foreach ($products as $product) { $existing = $this->findWebflowItem($product->external_id); if ($existing) { $this->updateItem($existing['id'], $product); } else { $this->createItem($product); } } $this->updateLastSync(now()); } private function findWebflowItem(string $externalId): ?array { // Webflow does not support searching by custom field directly via API, // so you need to store mapping in a local table $mapping = WebflowItemMapping::where('external_id', $externalId)->first(); return $mapping ? ['id' => $mapping->webflow_id] : null; } } Timelines and Scope of Work
- Simple integration via Zapier (form → CRM or spreadsheet): 1–2 hours
- CMS collection sync with an external system via API: 1 business day
- Full two-way synchronization with conflict handling: 2–3 business days
The time and cost savings are evident: automation eliminates manual entry and reduces errors. If you need to integrate Webflow with other systems — contact us. We will find a solution that fits your budget.







