Yelp Ads
Datafly Signal delivers conversion events to Yelp Ads through the Yelp Conversions API (CAPI) — a server-to-server endpoint that matches your conversions against Yelp ad engagement so you can measure cost-per-acquisition and return on ad spend without a browser pixel.
Signal sends purchase, lead, and custom events to Yelp from your own server. Match keys (email, phone, name) are normalised and SHA-256 hashed before they leave your infrastructure, so raw customer data is never transmitted.
Prerequisites
- A Yelp Ads account. Yelp generally provides Conversions API attribution reporting to advertisers with 10 or more locations — confirm eligibility with your Yelp account representative.
- A Yelp developer app created in the Yelp developer portal. Note its API key.
- Conversions API access activated for that app. Send your app’s client ID to your Yelp Sales or Customer Success representative and ask them to enable CAPI.
- A running Datafly Signal deployment with a pipeline collecting events via Datafly.js.
Configuration
| Field | Required | Description |
|---|---|---|
| API Key | Yes | The API key from your Yelp developer app, once CAPI is activated. Sent as Authorization: Bearer <api_key>. |
| Test Mode | No | When enabled, Yelp validates payloads without recording conversions. Use it while verifying, then disable for live traffic. |
Configure in Signal
- In your Signal management UI, open Integrations and add Yelp Ads.
- Paste your API Key.
- Leave Test Mode on while you validate, then turn it off.
- Attach the integration to a pipeline and select the Default preset.
- Save. Signal begins delivering mapped conversion events to Yelp.
API Endpoint
Signal posts to the Yelp Conversions API bulk endpoint:
POST https://api.yelp.com/v3/conversion/events
Authorization: Bearer <api_key>
Content-Type: application/jsonEvents are batched (up to 1,000 per request) and wrapped in an events array with a top-level test_event flag.
Identity Signals
Yelp matches conversions to ad engagement using hashed customer identifiers. Signal hashes these with SHA-256 after normalising them, so personal data never leaves your servers in the clear:
| Signal source | Yelp field | Treatment |
|---|---|---|
email | user_data.em[] | Lowercased, trimmed, SHA-256 |
phone | user_data.ph[] | E.164 digits, SHA-256 |
first_name | user_data.fn | Lowercased, trimmed, SHA-256 |
last_name | user_data.ln | Lowercased, trimmed, SHA-256 |
anonymous_id | user_data.external_id[] | SHA-256 |
| Client IP | user_data.client_ip_address | Sent as-is (not hashed) |
| User agent | user_data.client_user_agent | Sent as-is (not hashed) |
The more match keys you supply, the higher your match rate. Email and phone are the strongest signals.
Event Mapping
The Default preset maps these Signal events to Yelp conversion types:
| Signal event | Yelp event_name | Notes |
|---|---|---|
page | custom_page_view | Page view as a custom event |
Order Completed | purchase | Requires value; sends currency, order_id |
Lead Generated | lead | Optional value / currency |
Signed Up | lead | Sign-up treated as a lead |
All other events are dropped (the blueprint default is drop). action_source is set to website. Delivery is gated on the visitor’s canonical marketing consent — events from users who have not granted marketing consent are not sent.
Example
A Order Completed event emitted by Datafly.js:
datafly.track('Order Completed', {
order_id: 'ORD-1001',
revenue: 79.99,
currency: 'USD',
product_ids: ['SKU-A', 'SKU-B'],
}, {
traits: { email: 'jane@example.com', phone: '+12035551234' },
});Resulting payload to Yelp (hashes abbreviated):
{
"events": [
{
"event_id": "a1b2c3d4-...",
"event_time": 1717660800,
"event_name": "purchase",
"action_source": "website",
"user_data": {
"em": ["5e8...e1f"],
"ph": ["9a2...4c7"],
"client_ip_address": "203.0.113.5",
"client_user_agent": "Mozilla/5.0 ..."
},
"custom_data": {
"order_id": "ORD-1001",
"value": 79.99,
"currency": "USD",
"content_ids": ["SKU-A", "SKU-B"]
}
}
],
"test_event": false
}Testing
- Enable Test Mode in the integration settings.
- Trigger a test conversion (e.g. complete a test order on your site).
- Yelp validates the payload without recording it. A
200 OKresponse confirms the payload shape and authentication are correct. - Once validated, disable Test Mode so live conversions are recorded for attribution.
- Attribution reporting appears in your Yelp Ads dashboard (allow time for Yelp to process and match conversions).
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
401 Unauthorized | Invalid or revoked API key | Re-copy the key from your Yelp developer app. |
403 Forbidden | App not activated for CAPI | Ask your Yelp rep to enable the Conversions API on your app. |
400 Bad Request | Missing required field (event_time, event_name, action_source, or value on a purchase), or no usable match key | Check the event has at least one identity signal and a valid value/currency. |
| Conversions accepted but no attribution | Account below Yelp’s location threshold, or currency outside USD/CAD | Confirm eligibility with your Yelp rep; Yelp currently accepts only USD and CAD. |
| Events not sent | Visitor did not grant marketing consent, or event not in the mapping | Verify consent is captured and the event matches a mapped Signal event. |