This guide builds a Zap that adds new enquiries to Google Sheets. Arbour sends an event, Zapier fetches the enquiry, then checks for an existing row before adding one. Start in Settings → Integrations in Arbour.
Open integrationsPrerequisites
- An Arbour role with Manage outbound webhooks and Manage API keys.
- A paid Zapier account. Both Webhooks by Zapier and API by Zapier require a paid plan. API by Zapier is currently in beta, so its settings may change. See Zapier's API connection guide.
- A Google account with editing access to a test spreadsheet. Put Enquiry ID, Name, Stage, Event date and Created at in cells A1 to E1. Use fictional enquiry details while testing.
- An Arbour API key, saved in a Zapier connection as described below.
Keep the receiver URL private
This visual recipe does not verify webhook signatures. Anyone with the receiver URL could submit a request. Keep it private, restrict access to the Zap and save the API key in a connection. Arbour API keys have full organisation access. The advanced security section explains verification.
Connect Arbour
- 01
Create a Zap. Select Webhooks by Zapier as the trigger and Catch Hook as the event. Leave Pick Off A Child Key blank so the outer event type remains available.
- 02Open the trigger's Test tab and copy the webhook URL.
- 03
In Arbour, press Add endpoint under Webhooks. Name it Zapier enquiries to Sheets, paste the URL and subscribe only to
pipeline_item.created. Create the endpoint and save its signing secret in your secure credential store. It is separate from the API key.
Zapier parses the JSON into fields for later steps. Its webhook trigger guide describes the setup.
Test receipt
- 01
Open the endpoint in Arbour and press Send test ping. A successful response checks connectivity. The ping has empty
data, no enquiry fields and no entry in Arbour's delivery log. - 02
Create an enquiry with fictional details and an event date. Return to Zapier and press Test trigger. Select the sample whose outer
typeispipeline_item.createdand whosedata.typeisenquiry. - 03
Check that
data.pipelineItemIdcontains your enquiry's ID. If only the ping appears, create another test enquiry and test the trigger again before mapping fields.
The payload examples show a copyable ping and enquiry event. Their IDs are fictional; use the live sample for the API request. The webhook carries identifiers, not the enquiry's name or event date.
Build the automation
Keep only new enquiries
Add Filter by Zapier immediately after the trigger. Set two conditions joined with AND, using (Text) Exactly matches:
| Trigger field | Required value |
|---|---|
Outer type | pipeline_item.created |
data.type | enquiry |
Zapier may display nested fields as Data Type and Data Pipeline Item Id. Check the source path against your sample. The filter rules reference explains the matching options. Both conditions must pass, so pings and newly created bookings stop here.
Fetch the enquiry
- 01
In Zapier's Apps page, choose Add connection → API by Zapier. Select Static Headers (API key). In Headers, enter
Authorization: Bearer arb_..., replacingarb_...with your complete Arbour API key. Name the connection Arbour and set Domain filter toapi.usearbour.com. Leave the optional Test URL blank and save. - 02
Back in the Zap, add API by Zapier → API Request after the filter. Choose the saved Arbour connection and set Method to GET. Enter
https://api.usearbour.com/v1/pipeline-items/in URL, then insert the trigger'sdata.pipelineItemIdfield after the final slash. - 03
Leave query parameters, extra headers and body empty. Press Test step and inspect the JSON response. It should contain your enquiry's
id,displayName,stage.name,startDateandcreatedAt. Select these fields from this API response in later steps.
The connection supplies the header automatically. Do not add X-Arbour-Org; the key belongs to one organisation. Keep the API host fixed and map only the record ID from the webhook. See Zapier's API Request instructions for the request fields.
The response is the enquiry's current state. Its name, stage or date may have changed since the event was sent. startDate can be null.
Check for a row, then add one
- 01
Add Google Sheets → Lookup Spreadsheet Row. Connect your Google account, then choose the test spreadsheet and worksheet. Set Lookup column to Enquiry ID and Lookup value to
idfrom the API response. Leave supporting lookup fields empty. - 02
Set Successful if no search results are found? to True. Keep automatic row creation off. If multiple results are found, return the first result. Test with the sheet still empty.
- 03
Add another Filter by Zapier. Continue only when the lookup's Zap Search Was Found Status is (Boolean) Is false. A successful search step does not by itself mean a row was found. Confirm that this filter passes for an absent Enquiry ID.
- 04
Add Google Sheets → Create Spreadsheet Row and select the same spreadsheet and worksheet. Map each column using the earlier API Request response, not the lookup's empty output. Test the action once and check the new row.
These are Zapier's Google Sheets actions. Its search-action guide explains the no-result setting and found-status field.
| Sheet column | Field in the API response |
|---|---|
| Enquiry ID | id |
| Name | displayName |
| Stage | stage.name |
| Event date | startDate; leave the cell blank when null or absent |
| Created at | createdAt |
Use mapped fields, not the literal field names or values copied from the test. Keep Event date optional; do not replace a missing date with today's date or the text null.
In the row-creation action, type a single apostrophe ' before the mapped Name and Stage fields. This makes Sheets treat those values as text, including names that start with a formula character. See Zapier's guidance on text being interpreted as formulas.
Turn it on
- 01
Publish the Zap and confirm it is on. Check that the Arbour endpoint is enabled and still contains this Zap's URL. Zapier uses the same receiver URL for testing and live delivery.
- 02
Create a second fictional enquiry. Open its run in Zap History and follow the trigger, filter, API request, row lookup and row creation. Check all five cells in the sheet.
- 03
Re-test the lookup using that same enquiry ID after the row exists. It must find the row, and the following filter must stop. Do not test the row-creation action on its own again, because doing so bypasses the duplicate check.
- 04
Send another ping and create a fictional booking. Neither should reach the API request or add a row. Also test an enquiry without an event date and confirm its date cell is blank.
A lookup before insertion reduces duplicates when a fresh run searches after an earlier run has finished. Two simultaneous runs can both see no row and add one. This is not an exactly-once guarantee.
Zapier replays reuse search results rather than repeating the lookup. If a row write may already have succeeded, check the sheet before replaying a run. A replay with an old empty lookup result can add a duplicate. See the limitations in Zapier's search-action guide.
Troubleshoot
Arbour's delivery status records Zapier's acknowledgement. A delivered webhook does not prove the API request or spreadsheet action finished. Inspect Zap History for downstream failures. Arbour does not automatically retry a request that Zapier accepted; Arbour's delivery guide explains its retries and manual redelivery limits.
| Problem | What to check |
|---|---|
No sample or only ping | Create a new fictional enquiry and test the trigger again. Check the endpoint URL, subscription and enabled state. Keep the child-key field blank. |
| A test URL seems expired | Zapier has no separate temporary test URL. Copy the URL from the current Zap. Ownership transfer can change it. |
| The Zap is off but Arbour says delivered | An off or deleted Zap eventually returns 404, but this can take several hours. Check the Zap's state, not just the HTTP response. |
| API request returns 401 | Check the saved connection uses the complete, unrevoked arb_... key with Bearer before it. A whsec_... signing secret cannot authenticate an API request. |
| API request returns 404 | Check the mapped ID and the key's organisation. A record deleted before retrieval cannot be fetched. Stop the run rather than adding an empty row. |
| A request returns 429 | Inspect which service returned it. Arbour allows 600 API requests per minute per key. Allow time before retrying, and check Zapier and Google quotas too. |
| New enquiries stop at the lookup | Enable success when no result is found and keep automatic creation off. The next filter must use the lookup's found status, not its success status. |
| Duplicate rows | Check both Sheets actions target the same worksheet and use the API response's id. Concurrent runs, cached search results on replay or testing creation alone can bypass the intended check. |
| Delivery succeeded but Sheets failed | Inspect the failed step, Google connection, worksheet access and column mappings. Check for an existing row before retrying an uncertain write. |
Zapier documents receiver URL ownership and delayed 404 responses in its webhook trigger guide.
Advanced security
Catch Hook parses the body. For signature verification, Catch Raw Hook exposes the unparsed body and request headers, with a 2 MB limit. Changing triggers requires retesting and remapping fields; raw capture alone does not verify anything. See Zapier's raw-hook option.
Follow the shared signing reference: use the complete signing secret, the timestamp header and exact raw body for HMAC-SHA256; compare the v1=<hex> signature, reject stale timestamps and deduplicate delivery IDs durably. Do not parse and rebuild JSON before verification.
A verification step inside the Zap runs after Zapier has acknowledged receipt. To reject invalid requests before acceptance, put a verifying HTTPS receiver in front of the private Zap URL. It must verify first, durably queue accepted work and respond within Arbour's ten-second deadline. Forward only accepted events to Zapier. Building and hosting that receiver is separate from this guide.