# Lead Posting API Source: https://docs.pingtree.com/api-explore/database-source/create POST /api/lead/create/{db-source-id} The Create Lead API is used to add new lead data directly to the database source. This API is essential for maintaining comprehensive lead records and ensuring data is accurately stored across database source. ## Overview The Database Source Lead Posting API creates a new lead record directly in a database source. Unlike the offer campaign form API, this endpoint stores leads in a standalone database source — used as a centralised lead repository, suppression list, or feed for downstream campaigns. Both GET and POST HTTP methods are supported. Authentication is via the database source's API key, which is auto-generated when the source is created. ## Endpoint ``` POST /api/lead/create/{db-source-id} GET /api/lead/create/{db-source-id} ``` Replace `{db-source-id}` with the MongoDB Object ID of the database source. This is available in the Pingtree dashboard under Database Sources. ## Authentication Include the database source API key in the `Authorization` header: ``` Authorization: Bearer ``` The API key is generated when the database source is created and can be found on the source's detail page. ## Request Parameters ### Path Parameters | Parameter | Type | Required | Description | | -------------- | ------ | -------- | ---------------------------------------- | | `db-source-id` | string | Yes | MongoDB Object ID of the database source | ### Body / Query Parameters Fields accepted depend on the required fields configured for the database source. Common system fields include: | Parameter | Type | Required | Description | | ---------------- | ------ | ----------- | ------------------------------------------------- | | `first_name` | string | Conditional | Consumer's first name | | `last_name` | string | Conditional | Consumer's last name | | `email` | string | Conditional | Email address (validated as a valid email format) | | `mobile` | string | Conditional | 10-digit phone number (digits only) | | `address` | string | Conditional | Street address | | `city` | string | Conditional | City name (letters and spaces only) | | `state` | string | Conditional | 2-letter state abbreviation | | `zip_code` | string | Conditional | 5-digit ZIP code | | `transaction_id` | string | No | Custom transaction ID; auto-generated if omitted | For GET requests, pass parameters as query string values. For POST requests, send as a JSON body or form-encoded body. The exact required fields are configured per database source. Invalid or missing required fields result in rejection with a list of affected field names. ## Example Request — POST ```bash theme={null} curl -X POST "https://api.pingtree.com/api/lead/create/64a1b2c3d4e5f6a7b8c9d0e1" \ -H "Authorization: Bearer sk_live_abc123xyz789..." \ -H "Content-Type: application/json" \ -d '{ "first_name": "Sarah", "last_name": "Connor", "email": "sarah.connor@example.com", "mobile": "3105559876", "address": "999 Future Rd", "city": "Los Angeles", "state": "CA", "zip_code": "90210" }' ``` ## Example Request — GET ```bash theme={null} curl "https://api.pingtree.com/api/lead/create/64a1b2c3d4e5f6a7b8c9d0e1?first_name=Sarah&last_name=Connor&email=sarah.connor%40example.com&mobile=3105559876&zip_code=90210" \ -H "Authorization: Bearer sk_live_abc123xyz789..." ``` ## Example Responses ### Success — Lead Created ```json theme={null} { "status": 201, "message": "Lead successfully created", "data": { "leadStatus": "accept", "transaction_id": "db_txn_7f3a2b1c-4d56-78ef-9012-abcdef123456" } } ``` ### Success — Duplicate Lead ```json theme={null} { "status": 201, "message": "Duplicate lead", "data": { "leadStatus": "duplicate", "transaction_id": "db_txn_7f3a2b1c-4d56-78ef-9012-abcdef123456" } } ``` ### Error — Missing Required Field ```json theme={null} { "status": 400, "message": "Missing required fields", "data": { "leadStatus": "missingField", "missingFields": ["email", "mobile"] } } ``` ### Error — Invalid Field ```json theme={null} { "status": 400, "message": "Invalid field value", "data": { "leadStatus": "invalidField", "invalidFields": ["email"] } } ``` ### Error — Unauthorized ```json theme={null} { "status": 401, "message": "Unauthorized" } ``` ### Error — Source Not Found or Inactive ```json theme={null} { "status": 400, "message": "Database source not found or inactive" } ``` ## Status Codes | HTTP Code | Lead Status | Description | | --------- | -------------- | ------------------------------------------------------- | | 201 | `accept` | Lead created successfully | | 201 | `duplicate` | Lead already exists (deduplication enabled and matched) | | 400 | `missingField` | One or more required fields are absent | | 400 | `invalidField` | One or more fields failed format validation | | 401 | — | Invalid or missing API key | | 500 | — | Internal server error | ## Deduplication If the database source has deduplication enabled, the configured duplicate field (e.g. `email` or `mobile`) is checked against existing records before the lead is stored. If a match is found, the lead status is `duplicate` and the record is not stored again. ## Tips * **API key security.** The database source API key grants write access to that source. Keep it confidential and rotate it if compromised (via the Pingtree dashboard). * **GET vs POST.** GET requests are useful for simple server-to-server integrations or pixel-style firing. POST with a JSON body is recommended for production use. * **Allowed fields list.** The source can be configured with an allowed fields list that restricts which fields are accepted. Fields outside this list are silently ignored. * **TrustedForm fields.** `xxTrustedFormToken`, `xxTrustedFormCertUrl`, and `xxTrustedFormPingUrl` are automatically mapped to internal fields if present in the request. * **Rate limiting.** Database source endpoints are rate-limited per source. Contact your account manager if you need higher throughput limits. # Lead Fetch API Source: https://docs.pingtree.com/api-explore/database-source/fetch GET /api/lead/fetch/{db-source-id} The Fetch Lead API allows users to retrieve stored lead data from the database source. This functionality is useful for validating data, generating reports, or ensuring seamless follow-ups. ## Overview The Database Source Lead Fetch API retrieves lead records stored in a database source. It is designed for use cases such as lead validation lookups, deduplication checks, CRM syncs, and data exports. Leads can be looked up by field value (e.g. `email` or `mobile`) or retrieved as a paginated list. Authentication uses the same database source API key as the Lead Posting API. ## Endpoint ``` GET /api/lead/fetch/{db-source-id} ``` Replace `{db-source-id}` with the MongoDB Object ID of the database source. ## Authentication Include the database source API key in the `Authorization` header: ``` Authorization: Bearer ``` ## Request Parameters ### Path Parameters | Parameter | Type | Required | Description | | -------------- | ------ | -------- | ---------------------------------------- | | `db-source-id` | string | Yes | MongoDB Object ID of the database source | ### Query Parameters | Parameter | Type | Required | Description | | ---------------- | ------- | -------- | ------------------------------------------------ | | `email` | string | No | Filter by email address | | `mobile` | string | No | Filter by 10-digit phone number | | `transaction_id` | string | No | Fetch a specific lead by transaction ID | | `lookup_id` | string | No | Fetch by a custom lookup field value | | `page` | integer | No | Page number for paginated results (default: `1`) | | `limit` | integer | No | Records per page (default: `10`, max: `100`) | | `from` | string | No | Start date filter (ISO 8601: `YYYY-MM-DD`) | | `to` | string | No | End date filter (ISO 8601: `YYYY-MM-DD`) | At least one filter parameter is recommended. Calling the endpoint without any filters returns a paginated list of all leads in the source. ## Example Requests ### Look Up by Email ```bash theme={null} curl -G "https://api.pingtree.com/api/lead/fetch/64a1b2c3d4e5f6a7b8c9d0e1" \ -H "Authorization: Bearer sk_live_abc123xyz789..." \ --data-urlencode "email=sarah.connor@example.com" ``` ### Look Up by Mobile ```bash theme={null} curl -G "https://api.pingtree.com/api/lead/fetch/64a1b2c3d4e5f6a7b8c9d0e1" \ -H "Authorization: Bearer sk_live_abc123xyz789..." \ --data-urlencode "mobile=3105559876" ``` ### Paginated List with Date Range ```bash theme={null} curl -G "https://api.pingtree.com/api/lead/fetch/64a1b2c3d4e5f6a7b8c9d0e1" \ -H "Authorization: Bearer sk_live_abc123xyz789..." \ --data-urlencode "from=2025-08-01" \ --data-urlencode "to=2025-08-31" \ --data-urlencode "page=1" \ --data-urlencode "limit=50" ``` ## Example Responses ### Success — Lead Found ```json theme={null} { "status": 200, "message": "Lead found", "data": { "leads": [ { "transaction_id": "db_txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "first_name": "Sarah", "last_name": "Connor", "email": "sarah.connor@example.com", "mobile": "3105559876", "state": "CA", "zip_code": "90210", "db_source_id": "64a1b2c3d4e5f6a7b8c9d0e1", "createdAt": "2025-08-14T10:32:00.000Z" } ], "totalRecord": 1 } } ``` ### Success — No Leads Found ```json theme={null} { "status": 200, "message": "No leads found", "data": { "leads": [], "totalRecord": 0 } } ``` ### Error — Invalid Source ID ```json theme={null} { "status": 400, "message": "Database source not found or invalid ID" } ``` ### Error — Unauthorized ```json theme={null} { "status": 401, "message": "Unauthorized" } ``` ## Status Codes | HTTP Code | Description | | --------- | ----------------------------------------------------------- | | 200 | Request successful (leads array may be empty if none match) | | 400 | Invalid source ID or query parameters | | 401 | Invalid or missing API key | | 500 | Internal server error | ## Deduplication Check Endpoint For a lightweight existence check (without retrieving the full record), use the dedupe check endpoint: ``` GET /api/lead/check/:sourceID?email=sarah.connor@example.com ``` This returns a boolean `isDuplicate` flag and is faster than the full fetch for real-time deduplication at point of submission. ## Tips * **Use specific filters.** Fetching without filters pulls all leads and may be slow on large sources. Always filter by `email`, `mobile`, or `transaction_id` for point lookups. * **Pagination for exports.** When exporting all leads, iterate through pages using `page` and `limit`. Check `totalRecord` to determine how many pages to fetch (`Math.ceil(totalRecord / limit)`). * **Field visibility.** PII fields (email, mobile) are stored encrypted. The API decrypts and returns them in the response, but ensure your integration handles this data in compliance with your data privacy obligations. * **Atlas Search.** Database sources with Elasticsearch/Atlas Search enabled support faster and case-insensitive field lookups. Contact your account manager to enable this for high-volume sources. * **Allowed fields.** Only fields in the source's allowed fields list are stored and returned. Fields outside this list are not present in fetch results. # Pingtree API Explore Source: https://docs.pingtree.com/api-explore/introduction The Pingtree API Explore is a comprehensive guide designed to help you understand and integrate the Pingtree API effectively. It provides detailed insights into API endpoints, request parameters, and response structures to facilitate seamless lead distribution and tracking. Whether you're building custom integrations, automating lead flows, or optimizing campaign performance, this guide empowers you with the knowledge to leverage Pingtree's capabilities for enhanced lead management and improved results. ## Getting Started Before you begin integrating the Pingtree API, it's important to follow these initial steps to ensure a smooth setup process: 1. **API Authentication** * Obtain your API key and access credentials from the Pingtree platform to authenticate requests securely. 2. **Endpoint Configuration** * Familiarize yourself with the available endpoints and identify those relevant to your workflow. 3. **Data Mapping** * Plan your lead data structure to align with the Pingtree API's expected data format for seamless submissions and retrieval. 4. **Error Handling** * Implement error response management to handle issues like invalid data, authentication failures, or connectivity errors. By completing these steps, you can ensure your integration is well-structured, secure, and prepared for efficient data flow. *** ## Offer Campaign APIs These APIs are designed to facilitate lead form creation, submission tracking, and campaign performance monitoring. Each endpoint plays a vital role in ensuring accurate data collection, lead conversion tracking, and efficient campaign reporting. ### Create Form API The Create Form API is designed to enable seamless lead form creation and submission. It is ideal for capturing user data directly from landing pages or campaign websites, ensuring that lead information is collected accurately and efficiently. ### Update Form API The Update Form API is used to modify existing lead form data within a campaign. This API is especially useful when updating incorrect details, adding new information, or making adjustments to previously submitted leads to ensure accurate campaign records. ### Fetch Form Submission API The Fetch Form Submission API provides access to detailed responses from submitted lead forms. This functionality is essential for tracking and reviewing lead submissions, helping teams validate data, generate reports, or follow up on lead interactions. ### Campaign Lead List API The Campaign Lead List API retrieves a comprehensive list of leads linked to a particular campaign. This enables easy access to lead data for analysis, reporting, or follow-up tasks, ensuring campaign data is organized and accessible. ### Campaign Source Overview API The Campaign Source Overview API delivers reporting and statistical data for different lead sources within a campaign. This insight allows marketers to evaluate performance, identify top-performing sources, and refine their strategies accordingly. ### Event Postback API The Event Postback API is designed to trigger events that track and update lead data. It also supports converting leads into successful conversions, ensuring real-time data synchronization and improved campaign insights. ### Click Listing API The Click Listing API retrieves click listing data or offers linked to leads. This is particularly useful for showcasing available offers or tracking user interactions with campaigns. ### Click Listing Iframe API The Click Listing Iframe API is a simplified version of the Click Listing API, allowing data to be embedded directly on your page using an iframe. This integration streamlines the process of displaying offer data within your website. *** ## Database Source APIs These APIs are designed to manage lead data stored within the database, ensuring accurate data entry and retrieval. ### Create Lead API The Create Lead API is used to add new lead data directly to the database source. This API is essential for maintaining comprehensive lead records and ensuring data is accurately stored across database sources. ### Fetch Lead API The Fetch Lead API allows users to retrieve stored lead data from the database source. This functionality is useful for validating data, generating reports, or ensuring seamless follow-ups. *** ## Global Event Postback API The Global Event Postback API is a powerful endpoint designed to track and update lead data across multiple sources. It can also convert leads into successful conversions, ensuring consistency in data updates and improving overall tracking accuracy. *** ## Source APIs ### Form API ### PING + POST API ### [Cost Update API](/documentation/campaign/source-single-view/Cost-Update-API-\(MC\)) *** ## Conclusion The Pingtree API offers a comprehensive solution for managing lead generation campaigns, tracking lead interactions, and improving conversion outcomes. By leveraging these endpoints effectively, you can streamline data flow, enhance reporting, and maximize the success of your marketing efforts. # Click Listing API Source: https://docs.pingtree.com/api-explore/offer-campaign/click-listing-api GET /click/list/{cid}/{transaction_id} The Click Listing API retrieves click listing data or offers linked to leads. This is particularly useful for showcasing available offers or tracking user interactions with campaigns. ## Overview The Click Listing API retrieves the set of offers (click listings) associated with a consumer's lead submission. It is called after a lead has been accepted and returns a list of offers the consumer can click on, typically displayed on a results or thank-you page. Each offer includes a click-redirect URL, branding, and call-to-action details. This endpoint powers the offer wall that consumers see after form submission. It can be called directly from JavaScript or consumed server-side to build a custom offer display. ## Endpoint ``` GET /api/click/list/{cid}/{transaction_id} ``` | Segment | Description | | ------------------ | ---------------------------------------------------- | | `{cid}` | The campaign unique ID | | `{transaction_id}` | The transaction ID returned from the lead submission | ## Authentication No token-based authentication is required. The `cid` and `transaction_id` pair authenticates the request by scope. ## Request Parameters ### Path Parameters | Parameter | Type | Required | Description | | ---------------- | ------ | -------- | ------------------------------------------------ | | `cid` | string | Yes | Campaign unique ID | | `transaction_id` | string | Yes | Transaction ID from the lead submission response | ### Query Parameters | Parameter | Type | Required | Description | | --------- | ------ | -------- | ------------------------------------------- | | `pid` | string | No | Source unique ID for attribution tracking | | `device` | string | No | Consumer device type: `desktop` or `mobile` | ## Example Request ```bash theme={null} curl "https://api.pingtree.com/api/click/list/cmp_9z8y7x6w/txn_7f3a2b1c-4d56-78ef-9012-abcdef123456" ``` ## Example Response ```json theme={null} { "status": 200, "message": "Click listing retrieved successfully", "data": { "offers": [ { "clickListingId": "cl_001", "title": "Get Your Free Debt Quote", "description": "See offers from top-rated lenders in minutes.", "logoUrl": "https://cdn.example.com/logos/lender-a.png", "clickUrl": "https://api.pingtree.com/api/click/cl_001/cmp_9z8y7x6w/src_abc123/txn_7f3a2b1c", "callToAction": "Check My Rate", "displayOrder": 1, "device": "both" }, { "clickListingId": "cl_002", "title": "Compare Loan Options", "description": "Match with lenders who fund within 24 hours.", "logoUrl": "https://cdn.example.com/logos/lender-b.png", "clickUrl": "https://api.pingtree.com/api/click/cl_002/cmp_9z8y7x6w/src_abc123/txn_7f3a2b1c", "callToAction": "View Offers", "displayOrder": 2, "device": "both" } ], "totalOffers": 2 } } ``` ### Response — No Offers Available ```json theme={null} { "status": 200, "message": "No offers available for this lead", "data": { "offers": [], "totalOffers": 0 } } ``` ### Error — Invalid Transaction ID ```json theme={null} { "status": 400, "message": "Invalid or expired transaction_id" } ``` ## Click Redirect URL Structure Each offer's `clickUrl` follows this pattern: ``` GET /api/click/{clickListingId}/{cid}/{pid}/{transactionId} ``` When the consumer clicks an offer link, this URL records the click event and redirects to the advertiser's landing page. The redirect URL is resolved based on the offer configuration and the consumer's device type. ## Status Codes | HTTP Code | Description | | --------- | ---------------------------------- | | 200 | Offer list returned (may be empty) | | 400 | Invalid `cid` or `transaction_id` | | 500 | Internal server error | ## Tips * **Call after lead submission.** The click listing is populated once a lead is accepted. Call this endpoint immediately after receiving a successful submission response. * **Device targeting.** Pass the `device` parameter (`desktop` or `mobile`) to receive only offers configured for that device type. Offers with `device: "both"` are always included. * **Tracking clicks.** Each offer's `clickUrl` automatically records the click and handles the redirect — do not modify or reconstruct this URL. Clicks are tracked per impression and used for revenue reporting. * **Iframe alternative.** If you prefer a managed display, embed the [Click Listing iFrame](/api-explore/offer-campaign/click-listing-iframe) instead of building a custom offer wall with this API. * **CORS.** This endpoint supports cross-origin requests, so it can be called directly from browser JavaScript on your landing page domain. # Click Listing iFrame Source: https://docs.pingtree.com/api-explore/offer-campaign/click-listing-iframe Embed this Click Listing iFrame to display offer listings dynamically. Ensure that the page URL contains a transaction_id generated via Pingtree for proper functionality. The iFrame will automatically communicate the URL parameters to display relevant offers. ## Overview The Click Listing iFrame is the simplest way to display personalized offer listings on your thank-you or results page. Instead of building a custom offer wall using the [Click Listing API](/api-explore/offer-campaign/click-listing-api), you embed a single ` ``` The `onload` attribute fires as soon as the iFrame loads and sends the current page's query string (which contains the `transaction_id`) into the iFrame context via the `postMessage` API. ## How It Works 1. The consumer submits a lead form and is redirected to your results page. 2. The results page URL contains `?transaction_id=txn_abc123...` (and optionally `cid`, `pid`, and other parameters). 3. The embedded iFrame loads from Pingtree's servers. 4. On load, `postMessage` sends the parent page query string into the iFrame. 5. The iFrame reads `transaction_id` from the received parameters and fetches the matched offers. 6. Offers are rendered inside the iFrame; clicks are tracked and redirect consumers to advertiser pages. ## Requirements | Requirement | Details | | ---------------------------- | -------------------------------------------------------------------------------- | | `transaction_id` in page URL | Must be present as a query parameter on the parent page | | iFrame source URL | Obtain from Pingtree dashboard — unique per click listing configuration | | HTTPS | Both the parent page and iFrame source should be served over HTTPS | | Browser JavaScript | `postMessage` is used for cross-origin communication; JavaScript must be enabled | ## Implementation Steps 1. **Get your iFrame URL.** In the Pingtree dashboard, go to your campaign's Click Listing section and copy the embed URL for the desired listing. 2. **Add the iFrame to your results page.** Paste the embed code into the HTML where you want offers to appear. 3. **Confirm `transaction_id` is in the URL.** After form submission, ensure your redirect URL includes `?transaction_id=`. Pingtree typically appends this automatically. 4. **Set dimensions.** Adjust `width` and `height` to suit your page layout. A minimum height of `400px` is recommended for comfortable offer display. 5. **Test end-to-end.** Submit a test lead and confirm the results page loads with offers. Check the browser console for any `postMessage` or CORS errors. ## Example Results Page URL ``` https://results.yourdomain.com/thank-you?transaction_id=txn_7f3a2b1c&cid=cmp_9z8y7x6w&pid=src_abc123 ``` The iFrame automatically reads `transaction_id` from the query string above via `window.location.search`. ## Full Integration Example ```html theme={null} Your Personalized Offers

Here are your matched offers

``` ## Technical Details | Detail | Value | | -------------------- | ------------------------------------------------------------------------ | | Communication method | `window.postMessage` — cross-origin safe | | Data sent to iFrame | `{ s: window.location.search }` (full query string of parent page) | | Supported parameters | `transaction_id`, `cid`, `pid`, and all standard tracking parameters | | Responsive behaviour | Set `width="100%"` for full-width display; height must be set explicitly | | Click tracking | Handled automatically inside the iFrame | ## Security Considerations * **HTTPS only.** Serving the parent page over HTTP while the iFrame is on HTTPS (or vice versa) may cause mixed-content browser warnings. * **Trusted source.** Only embed iFrame URLs generated by the Pingtree platform. Do not modify the `src` URL. * **No token exposure.** The iFrame does not expose API tokens. Consumer data is fetched securely server-side using the `transaction_id`. * **Content Security Policy (CSP).** If your site uses a CSP header, add the Pingtree iFrame domain to your `frame-src` directive. ## Troubleshooting | Issue | Resolution | | ----------------------------- | -------------------------------------------------------------------------------- | | Offers not loading | Confirm `transaction_id` is present in the parent page URL | | Blank iFrame | Check browser console for CORS errors; verify the iFrame `src` URL is correct | | `postMessage` not firing | Ensure JavaScript is enabled and the `onload` attribute is not stripped by a CMS | | Mixed content warning | Serve both the parent page and iFrame over HTTPS | | Offers appear but clicks fail | Do not modify the offer click URLs; they are managed by Pingtree | For further assistance, contact your Pingtree support team or account manager. # Event Postback API Source: https://docs.pingtree.com/api-explore/offer-campaign/event-postback POST /api/event/{campaign-id} The Event Postback API is designed to trigger events that track and update lead data. It also supports converting leads into successful conversions, ensuring real-time data synchronization and improved campaign insights. ## Overview The Event Postback API fires a named tracking event against an existing lead. Use it to signal downstream actions — such as phone call completions, form steps, quote views, or conversions — that occur after the initial lead submission. When an event is a conversion event, a `revenue` value can be passed to trigger payout processing and buyer postbacks. The endpoint is typically called from your webflow or landing page JavaScript using the Pingtree SDK, but it can also be called server-side. ## Endpoint ``` POST /api/event/trigger ``` ## Authentication No token-based authentication header is required for this endpoint. Campaign identity is established through the `cid` field in the request body. ## Request Parameters ### Body Parameters (JSON) | Parameter | Type | Required | Description | | ---------------- | ------ | ----------- | ----------------------------------------------------------------------------------- | | `cid` | string | Yes | Campaign unique ID | | `event_id` | string | Yes | Unique event identifier configured in the campaign event settings | | `transaction_id` | string | Yes | Transaction ID of the lead this event belongs to | | `pid` | string | No | Source unique ID. Defaults to `organic` if omitted | | `revenue` | number | Conditional | Revenue amount for conversion events (required when the event is a conversion type) | ## Example Request ```bash theme={null} curl -X POST "https://api.pingtree.com/api/event/trigger" \ -H "Content-Type: application/json" \ -d '{ "cid": "cmp_9z8y7x6w", "event_id": "quote_viewed", "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "pid": "src_abc123" }' ``` ### Conversion Event with Revenue ```bash theme={null} curl -X POST "https://api.pingtree.com/api/event/trigger" \ -H "Content-Type: application/json" \ -d '{ "cid": "cmp_9z8y7x6w", "event_id": "sale_completed", "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "pid": "src_abc123", "revenue": 45.00 }' ``` ## Example Responses ### Success — Event Fired ```json theme={null} { "status": 200, "message": "Event triggered successfully", "data": { "cid": "cmp_9z8y7x6w", "pid": "src_abc123", "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "conversion_id": "", "conversion": false } } ``` ### Success — Conversion Event Fired ```json theme={null} { "status": 200, "message": "Event triggered successfully", "data": { "cid": "cmp_9z8y7x6w", "pid": "src_abc123", "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "conversion_id": "conv_a1b2c3d4-e5f6-7890-abcd-ef1234567890", "conversion": true } } ``` ### Error — Missing Event ID ```json theme={null} { "status": 400, "message": "event_id is required" } ``` ### Error — Missing Transaction ID ```json theme={null} { "status": 400, "message": "transaction_id is required" } ``` ### Error — Invalid Event ID ```json theme={null} { "status": 400, "message": "Invalid event_id for this campaign" } ``` ### Error — Duplicate Event (deduplication enabled) ```json theme={null} { "status": 400, "message": "Duplicate event for this transaction_id" } ``` ### Error — Source Inactive ```json theme={null} { "status": 403, "message": "Source Inactive" } ``` ## Status Codes | HTTP Code | Description | | --------- | -------------------------------------------------------------------- | | 200 | Event fired successfully | | 400 | Missing or invalid `event_id`, `transaction_id`, `cid`, or `revenue` | | 403 | Source is inactive or concurrent event in progress | | 500 | Internal server error | ## Tips * **Event IDs must be pre-configured.** The `event_id` value must match an event defined in the campaign's event settings. Contact your campaign manager to confirm available event IDs. * **Conversion events require `revenue`.** If the event is marked as a conversion type in the campaign settings, omitting `revenue` returns a 400 error. * **Deduplication:** If the campaign event has duplicate conversion disabled, firing the same `event_id` + `transaction_id` combination a second time returns a 400 duplicate error. Enable `isDuplicate` in event settings to allow repeated firing. * **Concurrent lock:** The API applies a 2-second lock per `transaction_id` + `event_id` pair to prevent race conditions from duplicate HTTP requests. Retries within this window return a 403. * **SDK usage:** When using the Pingtree JS SDK on a webflow, events are typically fired automatically based on user interactions. Direct API calls are for server-side or non-webflow implementations. # Fetch Form Submission API Source: https://docs.pingtree.com/api-explore/offer-campaign/fetch-response GET /api/lead/fetch-response/{campaign-id} The Update Form API is used to modify existing lead form data within a campaign. This API is especially useful when updating incorrect details, adding new information, or making adjustments to previously submitted leads to ensure accurate campaign records. ## Overview The Fetch Form Submission API retrieves the stored response data for a previously submitted lead. Use it to look up the distribution outcome, buyer response, deduplication result, or redirect URL associated with a specific `transaction_id`. This is useful for debugging integrations, auditing lead outcomes, and building confirmation pages that display post-submission results. ## Endpoint ``` GET /api/lead/fetch/:sourceID ``` Replace `:sourceID` with the source unique ID. The `transaction_id` is passed as a query parameter to identify the specific lead. ## Authentication Include your API token in the `Authorization` header: ``` Authorization: Bearer ``` ## Request Parameters ### Path Parameters | Parameter | Type | Required | Description | | ---------- | ------ | -------- | ------------------------------------ | | `sourceID` | string | Yes | The unique ID of the campaign source | ### Query Parameters | Parameter | Type | Required | Description | | ---------------- | ------ | -------- | ----------------------------------------------------- | | `transaction_id` | string | Yes | The transaction ID of the lead submission to retrieve | ## Example Request ```bash theme={null} curl -G "https://api.pingtree.com/api/lead/fetch/src_abc123" \ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \ --data-urlencode "transaction_id=txn_7f3a2b1c-4d56-78ef-9012-abcdef123456" ``` ## Example Responses ### Success — Lead Response Found ```json theme={null} { "status": 200, "message": "Lead response fetched successfully", "data": { "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "leadStatus": "accepted", "redirect_url": "https://thank-you.example.com?tid=txn_7f3a2b1c", "isDeDupe": false, "cid": "cmp_9z8y7x6w", "pid": "src_abc123", "createdAt": "2025-08-14T10:32:00.000Z" } } ``` ### Success — Duplicate Lead ```json theme={null} { "status": 200, "message": "Lead response fetched successfully", "data": { "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "leadStatus": "unsold", "isDeDupe": true, "cid": "cmp_9z8y7x6w", "pid": "src_abc123", "createdAt": "2025-08-14T10:35:00.000Z" } } ``` ### Error — Lead Not Found ```json theme={null} { "status": 400, "message": "No lead found for the provided transaction_id", "data": {} } ``` ### Error — Unauthorized ```json theme={null} { "status": 401, "message": "Unauthorized" } ``` ## Status Codes | HTTP Code | Description | | --------- | ------------------------------------------------------ | | 200 | Lead response retrieved successfully | | 400 | Invalid or missing `transaction_id`, or lead not found | | 401 | Invalid or missing API token | | 500 | Internal server error | ## Tips * **Immediate availability:** Response data is available as soon as the lead submission completes. In most cases, you can fetch it within a few milliseconds of the original POST. * **Debugging submissions:** If a landing page integration is not behaving as expected, use this endpoint to confirm what the platform recorded and returned during distribution. * **Redirect URL delivery:** If your form does not capture the `redirect_url` from the submission response, you can re-fetch it here and redirect the consumer server-side. * **Deduplication flag:** The `isDeDupe` field lets you determine whether the consumer had previously submitted through this campaign. # Create Form API Source: https://docs.pingtree.com/api-explore/offer-campaign/form-api POST /api/lead/{cid} The Create Form API is designed to enable seamless lead form creation and submission. It is ideal for capturing user data directly from landing pages or campaign websites, ensuring that lead information is collected accurately and efficiently. ## Overview The Create Form API submits a lead captured from a landing page or campaign form directly into the Pingtree lead distribution system. The lead is evaluated, distributed to buyers, and a response is returned indicating acceptance status, redirect URL, and deduplication state. ## Endpoint ``` POST /api/lead/add/{source-unique-id} ``` Replace `{source-unique-id}` with the unique link ID assigned to your campaign source (found in your posting spec). ## Authentication Include your API token in the `Authorization` header: ``` Authorization: Bearer ``` The token is source-specific and is provided in your campaign's posting specification. ## Request Parameters ### Path Parameters | Parameter | Type | Required | Description | | ------------------ | ------ | -------- | -------------------------------------------------- | | `source-unique-id` | string | Yes | The unique link identifier for the campaign source | ### Body Parameters (JSON or form-encoded) | Parameter | Type | Required | Description | | ---------------------- | ------ | ----------- | ------------------------------------------------------- | | `first_name` | string | Conditional | Consumer's first name | | `last_name` | string | Conditional | Consumer's last name | | `email` | string | Conditional | Consumer's email address | | `mobile` | string | Conditional | 10-digit mobile number (digits only) | | `address` | string | Conditional | Street address | | `city` | string | Conditional | City name | | `state` | string | Conditional | State abbreviation (e.g. `CA`) | | `zip_code` | string | Conditional | 5-digit ZIP code | | `country` | string | No | Country code (default: `US`) | | `date_of_birth` | string | No | Date of birth (YYYY-MM-DD) | | `transaction_id` | string | No | Pre-generated transaction ID; one is created if omitted | | `sub1` – `sub5` | string | No | Publisher sub-parameters for tracking | | `adv1` – `adv5` | string | No | Advertiser sub-parameters | | `utm_source` | string | No | UTM source | | `utm_medium` | string | No | UTM medium | | `utm_campaign` | string | No | UTM campaign | | `utm_term` | string | No | UTM term | | `utm_content` | string | No | UTM content | | `gclid` | string | No | Google Click ID | | `fbclid` | string | No | Facebook Click ID | | `ttclid` | string | No | TikTok Click ID | | `jornaya` | string | No | Jornaya lead ID token | | `xxTrustedFormCertUrl` | string | No | TrustedForm certificate URL | | `tcpa_consent` | string | No | TCPA consent flag | | `tcpa_consent_date` | string | No | TCPA consent timestamp | Required fields depend on the campaign configuration. Check your posting spec for the exact list of required fields. ## Example Request ```bash theme={null} curl -X POST "https://api.pingtree.com/api/lead/add/lnk_abc123xyz" \ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \ -H "Content-Type: application/json" \ -d '{ "first_name": "Jane", "last_name": "Doe", "email": "jane.doe@example.com", "mobile": "5551234567", "address": "123 Main St", "city": "Los Angeles", "state": "CA", "zip_code": "90001", "sub1": "campaign-abc", "utm_source": "google", "utm_medium": "cpc" }' ``` ## Example Responses ### Success — Lead Accepted ```json theme={null} { "status": "201", "message": "Lead successfully created", "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "data": { "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "leadStatus": "accepted", "redirect_url": "https://thank-you.example.com?tid=txn_7f3a2b1c" }, "isDeDupe": false } ``` ### Success — Duplicate Lead ```json theme={null} { "status": "201", "message": "Lead accepted as duplicate", "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "data": { "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "leadStatus": "unsold", "redirect_url": "https://thank-you.example.com" }, "isDeDupe": true } ``` ### Error — Missing Required Field ```json theme={null} { "status": "400", "message": "Missing required field: email", "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "data": { "leadStatus": "missingField" }, "isDeDupe": false } ``` ### Error — Unauthorized ```json theme={null} { "status": "401", "message": "Unauthorized", "data": { "leadStatus": "rejected" } } ``` ## Status Codes | HTTP Code | Lead Status | Description | | --------- | -------------- | ------------------------------------------------------------------- | | 201 | `accepted` | Lead was accepted and distributed | | 201 | `unsold` | Lead was recorded but not distributed (e.g. duplicate, cap reached) | | 400 | `missingField` | One or more required fields are absent | | 400 | `invalidField` | One or more fields failed format validation | | 400 | `rejected` | Lead was rejected by the campaign rules | | 401 | `rejected` | Invalid or missing authorization token | | 405 | `rejected` | HTTP method not allowed | | 500 | `rejected` | Internal server error | ## Tips * **Mobile format:** Strip all non-digit characters before submitting. The API normalises the field automatically, but sending `555-123-4567` or `(555) 123-4567` both work. * **Deduplication:** If deduplication is enabled for the campaign, the `isDeDupe` flag in the response indicates whether this lead was seen before. * **Redirect URL:** Use `redirect_url` from the response to forward the consumer to a thank-you page or offer wall. * **Custom fields:** Additional campaign-specific fields (e.g. `loan_amount`, `home_owner`) may be required. Check your posting spec for the complete field list. * **Rate limits:** Each campaign source has a configurable rate limit. Exceeding it returns a `429 Too Many Requests` response. # Global Event Postback API Source: https://docs.pingtree.com/api-explore/offer-campaign/global-event-postback POST /api/event/global/{org-id} The Event Postback API is designed to trigger events that track and update lead data. It also supports converting leads into successful conversions, ensuring real-time data synchronization and improved campaign insights. ## Overview The Global Event Postback API fires a conversion or tracking event across all campaigns within an organization using a single endpoint. It is designed for buyers and third-party systems that receive leads from multiple campaigns but want to post conversion data back using one consistent URL — without needing a different endpoint per campaign. Pingtree resolves the campaign and lead from the `transaction_id` automatically. No `cid` is required in the request body. ## Endpoint ``` POST /api/event/global/{org-id} ``` Replace `{org-id}` with your organization's unique ID (available in your Pingtree dashboard under account settings). ## Authentication No token-based authentication header is required. The `org-id` path parameter scopes the request to your organization. ## Request Parameters ### Path Parameters | Parameter | Type | Required | Description | | --------- | ------ | -------- | ---------------------- | | `org-id` | string | Yes | Organization unique ID | ### Body Parameters (JSON) | Parameter | Type | Required | Description | | ---------------- | ------ | ----------- | -------------------------------------------------------------------- | | `event_id` | string | Yes | Unique event identifier as configured in the campaign event settings | | `transaction_id` | string | Yes | Transaction ID of the lead record to fire the event against | | `revenue` | number | Conditional | Revenue amount for conversion events | | `pid` | string | No | Source unique ID (defaults to `organic` if omitted) | ## Example Request ```bash theme={null} curl -X POST "https://api.pingtree.com/api/event/global/org_5f1a2b3c" \ -H "Content-Type: application/json" \ -d '{ "event_id": "sale_completed", "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "revenue": 85.00 }' ``` ### Non-Conversion Event ```bash theme={null} curl -X POST "https://api.pingtree.com/api/event/global/org_5f1a2b3c" \ -H "Content-Type: application/json" \ -d '{ "event_id": "application_submitted", "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456" }' ``` ## Example Responses ### Success — Conversion Event Fired ```json theme={null} { "status": 200, "message": "Event triggered successfully", "data": { "cid": "cmp_9z8y7x6w", "pid": "src_abc123", "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "conversion_id": "conv_a1b2c3d4-e5f6-7890-abcd-ef1234567890", "conversion": true } } ``` ### Success — Tracking Event Fired ```json theme={null} { "status": 200, "message": "Event triggered successfully", "data": { "cid": "cmp_9z8y7x6w", "pid": "src_abc123", "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "conversion_id": "", "conversion": false } } ``` ### Error — Missing Event ID ```json theme={null} { "status": 400, "message": "event_id is required" } ``` ### Error — Missing Transaction ID ```json theme={null} { "status": 400, "message": "transaction_id is required" } ``` ### Error — Lead Not Found ```json theme={null} { "status": 400, "message": "No lead found for the provided transaction_id in this organization" } ``` ### Error — Invalid Event ID ```json theme={null} { "status": 400, "message": "Invalid event_id — event not configured for the associated campaign" } ``` ### Error — Duplicate Event ```json theme={null} { "status": 400, "message": "Duplicate event for this transaction_id" } ``` ## Status Codes | HTTP Code | Description | | --------- | ------------------------------------------------------------- | | 200 | Event fired successfully | | 400 | Missing or invalid `event_id`, `transaction_id`, or `revenue` | | 403 | Source inactive or concurrent event lock in progress | | 500 | Internal server error | ## Comparison with Campaign-Specific Event Postback | Feature | Global Event Postback | Campaign Event Postback | | -------------- | --------------------------------------------- | -------------------------------- | | Endpoint | `/api/event/global/{org-id}` | `/api/event/trigger` | | Requires `cid` | No | Yes | | Scope | All campaigns in the organization | Single campaign | | Ideal for | Buyers posting back across multiple campaigns | Campaign-specific event tracking | | Authentication | `org-id` in path | `cid` in request body | ## Tips * **Preferred endpoint for buyers.** If you are a buyer receiving leads from multiple campaigns within the same organization, use this global endpoint to avoid managing per-campaign event URLs. * **Event ID must exist in the matched campaign.** Even though you do not pass a `cid`, Pingtree resolves the campaign from the `transaction_id`. The `event_id` must be configured in that campaign's event settings. * **Revenue is required for conversion events.** If the matched event is a conversion type, omitting `revenue` returns a 400 error. * **Deduplication.** If the campaign event has duplicate conversion disabled, sending the same `event_id` + `transaction_id` a second time returns a 400 duplicate error. * **Postback URL format.** When configuring this as a server-to-server postback URL in a third-party platform, use a template like: `https://api.pingtree.com/api/event/global/org_5f1a2b3c?event_id=sale_completed&transaction_id={transaction_id}&revenue={payout}` # Lead List API Source: https://docs.pingtree.com/api-explore/offer-campaign/lead-list-api GET /api/lead/list/{org-id}/{cid} The Campaign Lead List API retrieves a comprehensive list of leads linked to a particular campaign. This enables easy access to lead data for analysis, reporting, or follow-up tasks, ensuring campaign data is organized and accessible. ## Overview The Lead List API returns a paginated list of leads associated with a specific offer campaign. Use it to pull lead records for reporting dashboards, data exports, CRM syncs, or campaign performance reviews. Results include lead details, status, source attribution, and timestamps. ## Endpoint ``` GET /api/lead/list/{org-id}/{cid} ``` | Segment | Description | | ---------- | ---------------------------------------- | | `{org-id}` | Your organization (advertiser) unique ID | | `{cid}` | The campaign unique ID | ## Authentication Include your API token in the `Authorization` header: ``` Authorization: Bearer ``` ## Request Parameters ### Path Parameters | Parameter | Type | Required | Description | | --------- | ------ | -------- | ---------------------- | | `org-id` | string | Yes | Organization unique ID | | `cid` | string | Yes | Campaign unique ID | ### Query Parameters | Parameter | Type | Required | Description | | ------------ | ------- | -------- | --------------------------------------------------------------- | | `page` | integer | No | Page number (default: `1`) | | `limit` | integer | No | Records per page (default: `10`, max: `100`) | | `sort` | string | No | Sort field (e.g. `createdAt`) | | `order` | string | No | Sort direction: `asc` or `desc` (default: `desc`) | | `search` | string | No | Filter by email, mobile, or name | | `from` | string | No | Start date filter (ISO 8601: `YYYY-MM-DD`) | | `to` | string | No | End date filter (ISO 8601: `YYYY-MM-DD`) | | `leadStatus` | string | No | Filter by status: `accepted`, `unsold`, `rejected`, `duplicate` | | `pid` | string | No | Filter by source unique ID | ## Example Request ```bash theme={null} curl -G "https://api.pingtree.com/api/lead/list/org_5f1a2b3c/cmp_9z8y7x6w" \ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \ --data-urlencode "page=1" \ --data-urlencode "limit=25" \ --data-urlencode "from=2025-08-01" \ --data-urlencode "to=2025-08-31" \ --data-urlencode "leadStatus=accepted" ``` ## Example Response ```json theme={null} { "status": 200, "message": "Leads retrieved successfully", "data": { "leads": [ { "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "first_name": "Jane", "last_name": "Doe", "email": "jane.doe@example.com", "mobile": "5551234567", "state": "CA", "zip_code": "90001", "leadStatus": "accepted", "isDeDupe": false, "pid": "src_abc123", "cid": "cmp_9z8y7x6w", "sub1": "campaign-abc", "createdAt": "2025-08-14T10:32:00.000Z" } ], "totalRecord": 412, "page": 1, "limit": 25 } } ``` ### Error — Invalid Campaign ```json theme={null} { "status": 400, "message": "Campaign not found or access denied" } ``` ### Error — Unauthorized ```json theme={null} { "status": 401, "message": "Unauthorized" } ``` ## Status Codes | HTTP Code | Description | | --------- | ------------------------------------------------ | | 200 | Lead list returned successfully | | 400 | Invalid campaign ID, org ID, or query parameters | | 401 | Invalid or missing API token | | 500 | Internal server error | ## Tips * **Pagination:** Always use the `page` and `limit` parameters when working with large campaigns to avoid timeouts. Start at page 1 and increment until you reach all records (`totalRecord / limit` pages). * **Date filters:** Use `from` and `to` together to pull leads for a specific reporting window. Both accept `YYYY-MM-DD` format and filter on the lead's creation timestamp in UTC. * **Source filtering:** Use the `pid` parameter to pull leads from a single source within a campaign — useful when comparing source performance. * **Status filtering:** Combine `leadStatus=accepted` with date filters for accurate sold-lead counts without pulling rejected or duplicate records. # Create Source Form API Source: https://docs.pingtree.com/api-explore/offer-campaign/source-form-api POST /api/lead/add/{source-unique-id} The API URL serves as the endpoint where the traffic source submits lead data. This URL must be installed and used by the source sending the data to ensure it’s received properly by Pingtree. [Find detailed documentation here](/documentation/campaign/source-single-view/Form-API-(CS,-MC,-MP)). Use [Generate Specs](/documentation/campaign/source-single-view/Generate-Specs-(CS,-MC,-MP)) feature to get the api specification for this endpoint. ## Overview The Source Form API is the primary lead submission endpoint for a specific campaign source. It accepts a full lead record from a publisher or media partner and routes it through the campaign's distribution logic. This endpoint is equivalent to the Create Form API but is scoped to a source identified by its unique link ID rather than a campaign ID. It is the endpoint listed in your posting specification under "Form API". ## Endpoint ``` POST /api/lead/add/{source-unique-id} ``` Replace `{source-unique-id}` with the `linkUniqueId` provided in your posting specification. This value is unique per source-campaign pairing. ## Authentication Include the source API token in the `Authorization` header: ``` Authorization: Bearer ``` The token is listed in your posting specification under the Form API section. ## Request Parameters ### Path Parameters | Parameter | Type | Required | Description | | ------------------ | ------ | -------- | ----------------------------------------------- | | `source-unique-id` | string | Yes | Link unique ID for this source-campaign pairing | ### Body Parameters (JSON or form-encoded) | Parameter | Type | Required | Description | | ---------------------- | ------ | ----------- | ------------------------------------------------------------- | | `first_name` | string | Conditional | Consumer's first name | | `last_name` | string | Conditional | Consumer's last name | | `email` | string | Conditional | Valid email address | | `mobile` | string | Conditional | 10-digit phone number (digits only) | | `address` | string | Conditional | Street address | | `city` | string | Conditional | City name | | `state` | string | Conditional | 2-letter state code (e.g. `TX`) | | `zip_code` | string | Conditional | 5-digit ZIP code | | `country` | string | No | Country code (default: `US`) | | `date_of_birth` | string | No | YYYY-MM-DD format | | `transaction_id` | string | No | Publisher-generated transaction ID; auto-generated if omitted | | `sub1` – `sub5` | string | No | Publisher sub-tracking parameters | | `adv1` – `adv5` | string | No | Advertiser sub-parameters | | `utm_source` | string | No | UTM source value | | `utm_medium` | string | No | UTM medium value | | `utm_campaign` | string | No | UTM campaign value | | `utm_term` | string | No | UTM term value | | `utm_content` | string | No | UTM content value | | `gclid` | string | No | Google Click ID | | `fbclid` | string | No | Facebook Click ID | | `ttclid` | string | No | TikTok Click ID | | `jornaya` | string | No | Jornaya LeadiD token | | `xxTrustedFormCertUrl` | string | No | TrustedForm certificate URL | | `tcpa_consent` | string | No | TCPA consent value | | `tcpa_consent_date` | string | No | TCPA consent timestamp | Campaign-specific custom fields (e.g. `loan_amount`, `home_owner`, `insurance_type`) may also be required. Your posting specification lists all active fields with their required status. ## Example Request ```bash theme={null} curl -X POST "https://api.pingtree.com/api/lead/add/lnk_abc123xyz" \ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \ -H "Content-Type: application/json" \ -d '{ "first_name": "John", "last_name": "Smith", "email": "john.smith@example.com", "mobile": "4085559876", "address": "456 Oak Avenue", "city": "Austin", "state": "TX", "zip_code": "73301", "loan_amount": 20000, "credit_score": "fair", "sub1": "pub-campaign-001", "transaction_id": "pub_txn_998877" }' ``` ## Example Responses ### Success — Lead Accepted (Sold) ```json theme={null} { "status": "201", "message": "Lead successfully created", "transaction_id": "pub_txn_998877", "data": { "transaction_id": "pub_txn_998877", "leadStatus": "accepted", "redirect_url": "https://offer.example.com/debt?tid=pub_txn_998877" }, "isDeDupe": false } ``` ### Success — Lead Unsold ```json theme={null} { "status": "201", "message": "Lead accepted", "transaction_id": "pub_txn_998877", "data": { "transaction_id": "pub_txn_998877", "leadStatus": "unsold", "redirect_url": "https://fallback.example.com" }, "isDeDupe": false } ``` ### Error — Invalid Field ```json theme={null} { "status": "400", "message": "Invalid field: mobile", "transaction_id": "pub_txn_998877", "data": { "leadStatus": "invalidField" }, "isDeDupe": false } ``` ## Status Codes | HTTP Code | Lead Status | Description | | --------- | -------------- | ----------------------------------------------------------- | | 201 | `accepted` | Lead distributed to at least one buyer | | 201 | `unsold` | Lead recorded but not distributed (cap, filters, no buyers) | | 400 | `missingField` | Required field absent from the request | | 400 | `invalidField` | Field value did not pass format validation | | 400 | `rejected` | Lead rejected by campaign rules | | 401 | `rejected` | Invalid or missing API token | | 405 | `rejected` | HTTP method not allowed | | 500 | `rejected` | Internal server error | ## Tips * **Check your posting spec:** The exact list of required and optional fields, acceptable values, and field descriptions are auto-generated in your campaign's posting specification page. * **Mobile number format:** Send only digits. The API strips non-digit characters, but a 10-digit number is required (e.g. `4085559876` not `+1 (408) 555-9876`). * **Custom transaction IDs:** If you supply a `transaction_id`, it must be unique per lead. Reusing an ID may overwrite or conflict with existing records. * **Redirect handling:** Store the `redirect_url` from the response and immediately redirect the consumer to it for optimal conversion. * **ZIP code lookup:** The API can resolve `city` and `state` from `zip_code` if those fields are not submitted, depending on campaign configuration. # Source List API Source: https://docs.pingtree.com/api-explore/offer-campaign/source-list-api GET /api/source-list/{org-id}/{cid} The Campaign Source Overview API delivers reporting and statistical data for different lead sources within a campaign. This insight allows marketers to evaluate performance, identify top-performing sources, and refine their strategies accordingly. ## Overview The Source List API returns performance and statistical data for all lead sources attached to a specific offer campaign. Use it to build reporting dashboards, monitor source-level metrics (leads, conversions, revenue), and identify top-performing or underperforming sources in real time. ## Endpoint ``` GET /api/source-list/{org-id}/{cid} ``` | Segment | Description | | ---------- | ---------------------------------------- | | `{org-id}` | Your organization (advertiser) unique ID | | `{cid}` | The campaign unique ID | ## Authentication Include your API token in the `Authorization` header: ``` Authorization: Bearer ``` ## Request Parameters ### Path Parameters | Parameter | Type | Required | Description | | --------- | ------ | -------- | ---------------------- | | `org-id` | string | Yes | Organization unique ID | | `cid` | string | Yes | Campaign unique ID | ### Query Parameters | Parameter | Type | Required | Description | | --------- | ------- | -------- | -------------------------------------------- | | `from` | string | No | Start date filter (ISO 8601: `YYYY-MM-DD`) | | `to` | string | No | End date filter (ISO 8601: `YYYY-MM-DD`) | | `search` | string | No | Search by source name | | `page` | integer | No | Page number (default: `1`) | | `limit` | integer | No | Records per page (default: `10`, max: `100`) | ## Example Request ```bash theme={null} curl -G "https://api.pingtree.com/api/source-list/org_5f1a2b3c/cmp_9z8y7x6w" \ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \ --data-urlencode "from=2025-08-01" \ --data-urlencode "to=2025-08-31" ``` ## Example Response ```json theme={null} { "status": 200, "message": "Source list retrieved successfully", "data": { "sources": [ { "sourceUniqueId": "src_abc123", "sourceName": "Google Display - Debt", "totalLeads": 1240, "acceptedLeads": 980, "rejectedLeads": 180, "duplicateLeads": 80, "totalConversions": 120, "totalRevenue": 4800.00, "totalPayout": 3600.00, "margin": 1200.00, "status": "active" }, { "sourceUniqueId": "src_def456", "sourceName": "Facebook Leads - Debt", "totalLeads": 540, "acceptedLeads": 430, "rejectedLeads": 70, "duplicateLeads": 40, "totalConversions": 55, "totalRevenue": 2200.00, "totalPayout": 1760.00, "margin": 440.00, "status": "active" } ], "totalRecord": 2, "page": 1, "limit": 10 } } ``` ### Error — Campaign Not Found ```json theme={null} { "status": 400, "message": "Campaign not found or access denied" } ``` ### Error — Unauthorized ```json theme={null} { "status": 401, "message": "Unauthorized" } ``` ## Status Codes | HTTP Code | Description | | --------- | ------------------------------------------------ | | 200 | Source list returned successfully | | 400 | Invalid campaign ID, org ID, or query parameters | | 401 | Invalid or missing API token | | 500 | Internal server error | ## Tips * **Date range filtering:** Use `from` and `to` to scope the stats to a reporting period. All metrics (leads, conversions, revenue) are calculated within the specified window. * **Monitoring performance:** Poll this endpoint periodically (e.g. every 15 minutes) to refresh a live performance dashboard for your campaign sources. * **Revenue vs payout:** `totalRevenue` is what buyers paid; `totalPayout` is what sources were paid. The difference (`margin`) represents your campaign's gross profit for that source. * **Inactive sources:** Sources with `status: "inactive"` are included in the response for historical reference but are not currently receiving leads. # Create Source Ping API Source: https://docs.pingtree.com/api-explore/offer-campaign/source-ping-api POST /api/lead/ping/{source-unique-id} The API URL serves as the endpoint where the traffic source submits lead data. This URL must be installed and used by the source sending the data to ensure it’s received properly by Pingtree. [Find detailed documentation here](/documentation/campaign/source-single-view/Ping-+-Post-API-(CS,-MC,-MP)). Use [Generate Specs](/documentation/campaign/source-single-view/Generate-Specs-(CS,-MC,-MP)) feature to get the api specification for this endpoint. ## Overview The Source Ping API is the first step in a two-call ping-post flow. It submits partial lead data to determine whether buyers are willing to purchase the lead and at what price — before any PII (personally identifiable information) is committed. If the ping is accepted, you receive a `transaction_id` and bid information, which you then use to complete the submission via the [Source Post API](/api-explore/offer-campaign/source-post-api). Use ping-post when you want buyer intent confirmation before collecting or submitting full consumer data. ## Endpoint ``` POST /api/lead/ping/{source-unique-id} ``` Replace `{source-unique-id}` with the `linkUniqueId` for your source, found in your posting specification under the Ping API section. ## Authentication Include the ping-specific API token in the `Authorization` header: ``` Authorization: Bearer ``` The ping token is separate from the form and post tokens. All three are listed in your posting specification. ## Request Parameters ### Path Parameters | Parameter | Type | Required | Description | | ------------------ | ------ | -------- | ----------------------------------------------- | | `source-unique-id` | string | Yes | Link unique ID for this source-campaign pairing | ### Body Parameters (JSON) Ping requests typically include non-PII fields sufficient for buyer evaluation. Required fields are defined in your posting specification. | Parameter | Type | Required | Description | | ---------------- | ------- | ----------- | ------------------------------------------------- | | `state` | string | Conditional | 2-letter state code (used for geo-targeting) | | `zip_code` | string | Conditional | 5-digit ZIP code | | `age` | integer | No | Consumer age (alternative to `date_of_birth`) | | `sub1` – `sub5` | string | No | Publisher sub-tracking parameters | | `adv1` – `adv5` | string | No | Advertiser sub-parameters | | `utm_source` | string | No | UTM source | | `utm_medium` | string | No | UTM medium | | `transaction_id` | string | No | Publisher-generated ID; auto-generated if omitted | Custom campaign-specific fields (e.g. `loan_amount`, `insurance_type`, `home_owner`) are often included in pings as they affect buyer bid logic. Check your posting spec for the full list. ## Example Request ```bash theme={null} curl -X POST "https://api.pingtree.com/api/lead/ping/lnk_abc123xyz" \ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \ -H "Content-Type: application/json" \ -d '{ "state": "CA", "zip_code": "90001", "loan_amount": 15000, "credit_score": "good", "home_owner": true, "sub1": "pub-campaign-001" }' ``` ## Example Responses ### Success — Ping Accepted ```json theme={null} { "status": "201", "message": "Ping accepted", "data": { "leadStatus": "ping_accept", "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "isDeDupe": false, "message": "Ping accepted", "amount": "45.00", "buyerTcpa": "By submitting this form you agree to be contacted by XYZ Lenders..." } } ``` ### Success — Ping Rejected (no buyers) ```json theme={null} { "status": "201", "message": "Ping rejected", "data": { "leadStatus": "ping_reject", "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "isDeDupe": false, "message": "No buyers available for this lead" } } ``` ### Error — Missing Required Field ```json theme={null} { "status": "400", "message": "Missing required field: state", "data": { "leadStatus": "missingField" } } ``` ### Error — Unauthorized ```json theme={null} { "status": "401", "message": "Unauthorized", "data": { "leadStatus": "rejected" } } ``` ## Status Codes | HTTP Code | Lead Status | Description | | --------- | -------------- | ---------------------------------------------------- | | 201 | `ping_accept` | At least one buyer bid on this lead; proceed to post | | 201 | `ping_reject` | No buyers matched; do not post | | 400 | `missingField` | Required field absent | | 400 | `invalidField` | Field failed format validation | | 400 | `rejected` | Campaign or source rule rejected the ping | | 401 | `rejected` | Invalid or missing ping token | | 405 | `rejected` | HTTP method not allowed | | 500 | `rejected` | Internal server error | ## Tips * **Ping before collecting PII:** Submit only the non-identifying lead attributes during the ping. Only proceed to collect name, email, and phone if the ping returns `ping_accept`. * **Store the `transaction_id`:** This ID must be included in the subsequent Post API call to link the two steps together. * **`amount` field:** The bid amount returned in the ping response (`data.amount`) can be used to display personalized offer messaging to the consumer before they complete the form. * **`buyerTcpa`:** Some campaigns return buyer-specific TCPA consent language in the ping response. Display this text to the consumer before they submit their full details in the post step. * **Ping TTL:** A ping acceptance has a limited validity window (typically a few minutes). If too much time passes before the post call, the lead may be rejected or re-evaluated. * **Do not post on rejection:** If `leadStatus` is `ping_reject`, do not proceed with the post call. Instead, consider an alternative buyer path or inform the consumer that offers are unavailable. # Create Source Post API Source: https://docs.pingtree.com/api-explore/offer-campaign/source-post-api POST /api/lead/post/{source-unique-id} The API URL serves as the endpoint where the traffic source submits lead data. This URL must be installed and used by the source sending the data to ensure it’s received properly by Pingtree. [Find detailed documentation here](/documentation/campaign/source-single-view/Ping-+-Post-API-(CS,-MC,-MP)). Use [Generate Specs](/documentation/campaign/source-single-view/Generate-Specs-(CS,-MC,-MP)) feature to get the api specification for this endpoint. ## Overview The Source Post API is the second step in a two-call ping-post flow. After a successful ping returns a `ping_accept` status and a `transaction_id`, call this endpoint to submit the full lead — including all PII — and finalise the distribution to the matched buyer(s). This endpoint must only be called after a successful ping. The `transaction_id` from the ping response is required to link the two calls together. ## Endpoint ``` POST /api/lead/post/{source-unique-id} ``` Replace `{source-unique-id}` with the `linkUniqueId` for your source, found in your posting specification under the Post API section. ## Authentication Include the post-specific API token in the `Authorization` header: ``` Authorization: Bearer ``` The post token is separate from the ping and form tokens. All three are listed in your posting specification. ## Request Parameters ### Path Parameters | Parameter | Type | Required | Description | | ------------------ | ------ | -------- | ----------------------------------------------- | | `source-unique-id` | string | Yes | Link unique ID for this source-campaign pairing | ### Body Parameters (JSON) | Parameter | Type | Required | Description | | ---------------------- | ------ | ----------- | ------------------------------------------- | | `transaction_id` | string | Yes | The transaction ID returned by the Ping API | | `first_name` | string | Conditional | Consumer's first name | | `last_name` | string | Conditional | Consumer's last name | | `email` | string | Conditional | Valid email address | | `mobile` | string | Conditional | 10-digit phone number (digits only) | | `address` | string | Conditional | Street address | | `city` | string | Conditional | City name | | `state` | string | Conditional | 2-letter state code | | `zip_code` | string | Conditional | 5-digit ZIP code | | `date_of_birth` | string | No | YYYY-MM-DD format | | `sub1` – `sub5` | string | No | Publisher sub-tracking parameters | | `adv1` – `adv5` | string | No | Advertiser sub-parameters | | `jornaya` | string | No | Jornaya LeadiD token | | `xxTrustedFormCertUrl` | string | No | TrustedForm certificate URL | | `tcpa_consent` | string | No | TCPA consent value | | `tcpa_consent_date` | string | No | TCPA consent timestamp | All campaign-specific custom fields sent in the ping should also be included in the post. Your posting specification lists required and optional fields for the Post API specifically. ## Example Request ```bash theme={null} curl -X POST "https://api.pingtree.com/api/lead/post/lnk_abc123xyz" \ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \ -H "Content-Type: application/json" \ -d '{ "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "first_name": "John", "last_name": "Smith", "email": "john.smith@example.com", "mobile": "4085559876", "address": "456 Oak Avenue", "city": "Austin", "state": "CA", "zip_code": "90001", "loan_amount": 15000, "credit_score": "good", "home_owner": true, "sub1": "pub-campaign-001" }' ``` ## Example Responses ### Success — Lead Sold ```json theme={null} { "status": "201", "message": "Lead successfully created", "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "data": { "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "leadStatus": "accepted", "redirect_url": "https://offer.example.com/debt?tid=txn_7f3a2b1c" }, "isDeDupe": false } ``` ### Success — Lead Unsold ```json theme={null} { "status": "201", "message": "Lead accepted", "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "data": { "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "leadStatus": "unsold", "redirect_url": "https://fallback.example.com" }, "isDeDupe": false } ``` ### Error — Missing Transaction ID ```json theme={null} { "status": "400", "message": "Missing required field: transaction_id", "data": { "leadStatus": "missingField" } } ``` ### Error — Invalid Field ```json theme={null} { "status": "400", "message": "Invalid field: email", "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "data": { "leadStatus": "invalidField" }, "isDeDupe": false } ``` ## Status Codes | HTTP Code | Lead Status | Description | | --------- | -------------- | ---------------------------------------------------------------------- | | 201 | `accepted` | Lead distributed to buyer(s) matched during ping | | 201 | `unsold` | Lead recorded but not distributed (buyer retracted, cap, etc.) | | 400 | `missingField` | Required field (including `transaction_id`) is absent | | 400 | `invalidField` | Field failed format validation | | 400 | `rejected` | Post rejected (ping expired, invalid `transaction_id`, campaign rules) | | 401 | `rejected` | Invalid or missing post token | | 405 | `rejected` | HTTP method not allowed | | 500 | `rejected` | Internal server error | ## Tips * **Always use the ping's `transaction_id`.** The post call is linked to the ping via this ID. Submitting a new or mismatched ID will result in a rejection. * **Post promptly after ping.** Ping acceptances have a time-to-live window. If the consumer takes too long to fill in the form, the bid may expire and the post could be rejected or unsold. * **Include the same custom fields.** Buyer evaluation during ping used the custom fields you sent. Include them again in the post for consistency and to avoid validation errors. * **Redirect URL:** Store `redirect_url` from the post response and redirect the consumer immediately to complete the buyer journey. * **Do not reuse tokens across steps.** The ping token and post token are different credentials. Using the wrong token returns a 401 error. # Update Lead API Source: https://docs.pingtree.com/api-explore/offer-campaign/update-api POST /api/lead/update/{cid} The Update Form API is used to modify existing lead form data within a campaign. This API is especially useful when updating incorrect details, adding new information, or making adjustments to previously submitted leads to ensure accurate campaign records. ## Overview The Update Lead API enriches or corrects an existing lead record in a campaign. Use it when additional data becomes available after initial submission — for example, after a secondary form step, a phone verification flow, or a credit check callback. The lead is identified by `transaction_id` and the campaign's offer campaign ID. ## Endpoint ``` POST /api/lead/update/{offerCampaignId} ``` Replace `{offerCampaignId}` with the unique identifier of the offer campaign (available in your posting spec or dashboard). ## Authentication Include the enrichment token in the `Authorization` header: ``` Authorization: Bearer ``` The enrichment token is distinct from the standard form API token and is listed separately in your posting specification. ## Request Parameters ### Path Parameters | Parameter | Type | Required | Description | | ----------------- | ------ | -------- | ----------------------------------- | | `offerCampaignId` | string | Yes | The unique ID of the offer campaign | ### Body Parameters (JSON) | Parameter | Type | Required | Description | | ---------------- | ------ | -------- | ----------------------------------------------------------- | | `transaction_id` | string | Yes | The transaction ID returned by the original lead submission | | `first_name` | string | No | Updated first name | | `last_name` | string | No | Updated last name | | `email` | string | No | Updated email address | | `mobile` | string | No | Updated 10-digit mobile number | | `address` | string | No | Updated street address | | `city` | string | No | Updated city | | `state` | string | No | Updated state abbreviation | | `zip_code` | string | No | Updated ZIP code | | `date_of_birth` | string | No | Updated date of birth (YYYY-MM-DD) | | `sub1` – `sub5` | string | No | Updated publisher sub-parameters | | `adv1` – `adv5` | string | No | Updated advertiser sub-parameters | Any campaign-specific custom fields (e.g. `loan_amount`, `credit_score`) can also be included in the body. Only fields present in the request body are updated; existing field values are not overwritten if omitted. ## Example Request ```bash theme={null} curl -X POST "https://api.pingtree.com/api/lead/update/cmp_9z8y7x6w" \ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \ -H "Content-Type: application/json" \ -d '{ "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "loan_amount": 15000, "credit_score": "good", "home_owner": true }' ``` ## Example Responses ### Success — Lead Updated ```json theme={null} { "status": "201", "message": "Lead successfully updated", "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "data": { "transaction_id": "txn_7f3a2b1c-4d56-78ef-9012-abcdef123456", "leadStatus": "accepted", "redirect_url": "https://thank-you.example.com?tid=txn_7f3a2b1c" }, "isDeDupe": false } ``` ### Error — Missing Transaction ID ```json theme={null} { "status": "400", "message": "transaction_id is required", "data": { "leadStatus": "missingField" } } ``` ### Error — Lead Not Found ```json theme={null} { "status": "400", "message": "Lead not found for the given transaction_id", "data": { "leadStatus": "rejected" } } ``` ### Error — Unauthorized ```json theme={null} { "status": "401", "message": "Unauthorized", "data": { "leadStatus": "rejected" } } ``` ## Status Codes | HTTP Code | Lead Status | Description | | --------- | -------------- | ---------------------------------------------------------------- | | 201 | `accepted` | Lead was updated and re-evaluated successfully | | 201 | `unsold` | Lead was updated but not re-distributed | | 400 | `missingField` | `transaction_id` or another required enrichment field is missing | | 400 | `invalidField` | A field failed format validation | | 400 | `rejected` | The lead record was not found or the update was rejected | | 401 | `rejected` | Invalid or missing enrichment token | | 405 | `rejected` | HTTP method not allowed | | 500 | `rejected` | Internal server error | ## Tips * **`transaction_id` is mandatory.** The update endpoint uses it to locate the original lead record. Always store this value from the initial form submission response. * **Partial updates are safe.** Only send the fields you want to change. Fields not included in the request are left unchanged. * **Re-distribution:** Depending on campaign settings, updating a lead may trigger re-distribution to buyers. Check with your campaign manager if re-posting behaviour is required. * **Enrichment token vs form token:** These are different credentials. Using the wrong token returns a 401 error. # Hourly Report Source: https://docs.pingtree.com/documentation/analytics/hourly-reports Monitor and analyze campaign activity in Pingtree (PT) on an hourly basis for any specific day. The **Hourly Report** in **Pingtree (PT)** allows users to monitor and filter campaign performance data on an **hour-by-hour** basis for any selected day. This is useful for analyzing trends, identifying performance spikes, and optimizing campaign timing. Hourly report with summary metrics, column filters, and hourly breakdown table *** ## Overview With the Hourly Report feature, users can: * View campaign performance segmented by each hour of a selected day * Apply multi-dimensional filters * Customize the visible data using column selectors analytics *** ## Key Features ### Add/Remove Table Columns * Click the **column selector** icon to open the column manager. * **Show or hide** specific metrics depending on what data you want to analyze. * Customize the data view to match your team’s reporting needs. *** ### Multi-Level Filtering Apply filters across several dimensions to focus your view: * **Campaigns** * **Traffic Sources** * **Advertisers** * **Endpoints** * **Media Types** * And more... You can filter by **individual** or **multiple** values in each category. analytics *** ### Date Selection * Use the **Date Picker** to choose the specific day you want to review. * All data shown in the report corresponds to the selected date. * Hours are displayed in the selected **timezone**. analytics *** ## Navigation Path To access the Hourly Report: > **Left Sidebar → Analytics → Hourly Report** From there, select your filters and columns to generate your customized hourly performance view. # Pivot Report Source: https://docs.pingtree.com/documentation/analytics/pivot-reports Create and customize campaign-specific reports using the Pivot Report feature in Pingtree. The **Pivot Report** feature in Pingtree (PT) allows **organization owners** to create and save fully customizable reports based on campaign performance, traffic sources, devices, geography, and more. By default, the system loads a **Default Report**, but owners can generate personalized dashboards with filters, metrics, and summaries that match their specific goals. Pivot report with summary metrics, filters, and detailed campaign breakdown *** ## Overview With Pivot Reports, you can: * View **real-time campaign activity** * Customize columns and filters * Choose from multiple field types (system, custom, device, geo) * Save, load, and export tailored reports *** ## Key Features ### Create Pivot Report * Navigate to **Analytics > Pivot Report**. * Use the **Custom Column Filter** dropdown to enable: * **Campaigns** * **Custom Sources** * **Marketing Partners** * **Media Channels** * **Advertisers** * **Custom Endpoints** * **Parent Labels** * **Media Types** You can also enable/disable toggle buttons per requirement to generate highly focused reports. All Sources *** ### Add Filter Dropdown Use the **Add Filter** dropdown to refine your data: * Target specific **campaigns or sources** * Apply **metric-level conditions** * Segment by **device**, **geolocation**, or **custom fields** All Sources *** ### Use Metric Filters and Color Highlights You can use **color indicators** to visually represent data points in the Pivot Report for better analysis and pattern recognition. All Sources *** ### Summary Columns Section Choose which **Summary Columns** (e.g., total leads, accepted leads, profit, margin) to include using the Summary section selector. All Sources *** ### Timezone & Date Range * Select a **Timezone** using the dropdown * Define a **Time Interval** using the **Date Picker** All Sources *** ## Save, Load, and Export Reports All Sources ### Save a Report 1. Click the **three-dot menu** (next to Date Picker) 2. Select **Save As** 3. Enter a **name** for your report > *Timezone and time interval are pre-filled by default* Saved reports are stored in:\ **Analytics > Pivot Report** All Sources *** ### Load a Saved Report 1. Click the **three-dot menu** 2. Select **Load** 3. Choose a saved report from the dropdown You can also directly access saved reports via the **Pivot Report list view**. All Sources *** ### Export a Report 1. Click the **three-dot menu** 2. Select **Export** 3. Your report will be automatically downloaded as a file. *** ## Detailed Report View Once a report is generated: * A **Summary Section** appears at the top. * Below that, you’ll see the **Detailed Data Table**. * Click on **Columns Popup** to show/hide custom columns and tailor the report to your analysis needs. All Sources *** ## Use Case Examples * Compare **performance across campaigns** and **traffic types** * Highlight **high-converting sources** using color filters * Track **daily lead submissions by state or device** * View performance breakdowns by **Media Channels or Partners** # Billing Reports Source: https://docs.pingtree.com/documentation/billing/billing-report View itemized monthly billing records, track usage across all platform services, manage payments, and understand your billing tier and free allowances. ## Overview The **Billing Report** gives you a complete, itemized view of your organization's charges each billing period. From here you can review usage costs, make payments, and generate custom usage reports — all without leaving the platform. Navigate to **Billing > Billing Report** to access this section. Monthly billing report with usage breakdown and payment status *** ## Monthly Billing Records Each billing period generates a record that breaks down all charges for that month. The billing table shows: | Column | Description | | -------------------- | ------------------------------------------------------------- | | **Billing Period** | The month and year this record covers | | **Base Cost** | Your flat monthly plan cost (if applicable) | | **Usage Cost** | Charges based on actual platform usage | | **Integration Cost** | Charges from third-party integration calls | | **Domain Cost** | Costs for registered or managed domains | | **DID Cost** | Monthly charges for DID (Direct Inward Dialing) phone numbers | | **Total** | Combined total for the billing period | | **Status** | Paid, Pending, or Overdue | Click on any billing record to see the full itemized breakdown. *** ## Usage-Based Billing Breakdown If your account uses usage-based billing, charges are calculated on actual platform activity. The breakdown includes: | Usage Type | Description | | ------------------- | -------------------------------------------------------- | | **Leads Processed** | Total leads submitted and processed through the platform | | **Webhooks** | Number of outbound webhook calls fired | | **Pings** | Ping API calls made during ping-post flows | | **Lead Fetches** | Leads retrieved via the lead fetch API | Each usage type has a per-unit rate and a free tier allowance (see Free Tier Allowances below). You are only charged for usage above the free tier. *** ## Integration Usage Tracking Third-party integrations are billed per API call. The billing report tracks usage for each integration separately so you can understand which services drive the most cost. | Integration | What It Does | | -------------------- | --------------------------------------------------- | | **Array** | Credit pull and financial data retrieval | | **Phone Validation** | Validates and scores phone numbers in real time | | **Email Validation** | Validates email addresses and checks deliverability | | **Fraud Detection** | Screens leads for fraudulent signals | | **Loan Lookup** | Retrieves loan and debt information for a lead | | **Credit Pulls** | Soft or hard credit inquiry services | | **Spinwheel** | Student loan data retrieval and analysis | Each integration row shows: * Total calls made during the billing period * Cost per call * Total cost for that integration *** ## Base Cost and Service Cost Breakdown | Line Item | Description | | ---------------------------- | --------------------------------------------------------- | | **Base Cost** | The fixed monthly cost of your Pingtree subscription plan | | **Usage Service Cost** | Variable costs from platform usage above free tier limits | | **Integration Service Cost** | Variable costs from third-party integration API calls | The billing report always separates base costs from usage costs so you have a clear view of your predictable vs. variable spend. *** ## Domain Costs Domain charges appear as a separate line item in your billing record. | Domain Type | Description | | -------------------- | --------------------------------------------------------- | | **Internal Domains** | Domains purchased and managed through Pingtree | | **External Domains** | Domains registered elsewhere but managed via Pingtree DNS | Domain costs reflect annual registration fees prorated monthly where applicable. Renewal charges appear in the billing period when the renewal occurs. *** ## DID Number Costs If your organization uses DID (Direct Inward Dialing) phone numbers for call tracking or routing, each active number incurs a monthly fee. The billing report shows: * Number of active DID numbers * Monthly cost per number * Total DID charges for the period *** ## Payment Status and History Each billing record shows a payment status: | Status | Meaning | | ----------- | -------------------------------------------------- | | **Paid** | Payment has been received and applied | | **Pending** | Invoice is open; payment is due | | **Overdue** | Payment is past due; service may be restricted | | **Waived** | The charge has been waived by your account manager | Click on a billing record and select **View Payment History** to see a log of all payments applied to that invoice. *** ## Making a Payment You can pay an open invoice directly from the Billing Report without leaving the platform. 1. Locate the billing record with a **Pending** or **Overdue** status. 2. Click **Make Payment**. 3. Select the payment method you want to use (credit card or bank account on file). 4. Confirm the payment amount. 5. Click **Submit Payment**. Payment confirmation is immediate for card payments. ACH payments may take 3–5 business days to settle. > **Tip:** To add or update payment methods before paying an invoice, go to **Settings > Payment Methods**. *** ## Generating Custom Usage Reports If you need a detailed export of your usage data: 1. Go to **Billing > Billing Report**. 2. Click **Generate Report**. 3. Select the date range you want to cover. 4. Choose the data types to include (leads, webhooks, pings, integrations, etc.). 5. Click **Export**. Reports are exported as CSV files and downloaded directly to your browser. *** ## Billing Tiers and Free Tier Allowances Pingtree plans include a free tier for core usage types before per-unit charges apply. | Usage Type | Free Tier Allowance | | ------------------- | ------------------- | | **Leads Processed** | Varies by plan | | **Webhooks** | Varies by plan | | **Pings** | Varies by plan | | **Lead Fetches** | Varies by plan | Your billing tier details are visible at the top of the Billing Report page. Contact your Pingtree account manager to discuss plan upgrades if you regularly exceed your free tier limits. *** ## Organization Status Your organization's billing status affects platform access: | Status | Description | | ----------------- | --------------------------------------------------------------------- | | **Trial** | Account is in a free trial period; some features may be limited | | **Paid** | Active subscription with full platform access | | **Session-Based** | Access is granted per session or based on a pay-as-you-go arrangement | | **Suspended** | Account is suspended due to non-payment; contact support to reinstate | The current organization status is displayed in your account settings and in the billing report header. # Call Management Overview Source: https://docs.pingtree.com/documentation/call-management/call-overview Track, route, and record inbound calls as first-class leads inside Pingtree — powered by Telnyx. Call Management turns phone calls into fully trackable lead events. Every inbound call is treated as a lead alongside form submissions and click events, giving you a unified view of performance across all acquisition channels. > **Video Walkthrough:** A step-by-step video guide for this feature is coming soon. Call management overview showing DID numbers and call analytics ## What is Call Management? Call Management is a set of tools that lets you purchase dedicated phone numbers, route inbound callers to buyers, record conversations, and monitor call activity in real time — all without leaving Pingtree. The infrastructure runs on **Telnyx**, a carrier-grade communications platform that handles number provisioning, call control, and audio delivery. At a high level, the workflow looks like this: 1. Purchase a DID (Direct Inward Dialing) number through the Pingtree interface. 2. Assign that number to a campaign and source combination. 3. Configure how callers are greeted and routed. 4. Calls come in, are tracked as leads, and distributed to buyers via your existing campaign routing rules. 5. View recordings, analytics, and performance data alongside your other lead types. ## DID Numbers A DID number is a real phone number that callers dial. Pingtree purchases numbers on your behalf through Telnyx and stores them in your account. * Search for **local** (geographic area code) or **toll-free** (800, 833, 844, 855, 866, 877, 888) numbers. * Numbers are purchased from your wallet balance. An upfront charge and a recurring monthly charge apply. * Each number must be **assigned** to exactly one campaign + source combination before it can receive traffic. * When you no longer need a number, **release** it to stop charges and remove it from Telnyx. See [DID Numbers](./did-numbers) for the full purchasing and assignment workflow. ## Call Routing When a call arrives on a purchased number, Pingtree's call control layer handles the interaction: 1. A **greeting** is played to the caller using Text-to-Speech (TTS) with a configurable voice and message. 2. If no buyer is available, a **hold/waiting audio** clip plays while routing occurs. 3. The call is transferred to the winning buyer's phone number. 4. An **ending message** can play before the call concludes. Routing follows the same pingtree/ping-post rules configured for the campaign, so calls compete through your buyer pool just like form leads. ## Call Recording Recording is opt-in and configured per campaign source. When enabled: * Recordings are captured in **MP3 format with dual-channel audio** (caller and buyer on separate tracks). * Recordings are stored securely in cloud storage and accessible via a time-limited signed URL (valid 15 minutes). * A **retention period** controls how long recordings are kept — options range from 30 days to lifetime. Longer retention periods carry a higher cost multiplier on the per-minute recording charge. > **Tip:** Enable recording for quality assurance and compliance use cases. Dual-channel recordings make it easy to evaluate both sides of the conversation independently. ## Real-Time Analytics The Real-Time Analytics dashboard gives you a live view of call traffic: | Metric | Description | | ---------------- | -------------------------------------------- | | Total Calls | All inbound calls in the selected date range | | Answered Calls | Calls successfully connected to a buyer | | Missed Calls | Calls that were not answered | | Active Calls | Calls currently in progress | | Total Duration | Cumulative talk time across all calls | | Average Duration | Mean call length | The dashboard auto-refreshes at a configurable interval (3, 5, or 10 seconds) and can be filtered by campaign and source. See [Real-Time Call Analytics](./realtime-analytics) for details. ## Calls as Leads In Pingtree's data model, a call is a lead. Each inbound call creates a lead record linked to: * The **campaign** and **source** the DID number is assigned to. * A **lead transaction ID** for traceability in reports. * A **buyer** when the call is answered and counted toward cap/payout rules. This means call traffic flows through the same reporting, conversion tracking, and buyer payout system as form and click leads — no separate reporting pipeline to manage. ## Architecture Summary | Component | Role | | ------------------------ | --------------------------------------------------------------- | | Telnyx | Carrier-grade number provisioning, call control, and recording | | DID Numbers | Dedicated inbound phone numbers assigned to campaign sources | | Call Control Application | Telnyx application that handles real-time call events | | Billing Group | Groups numbers for cost management within Telnyx | | Redis Cache | Caches DID-to-source assignment lookups for low-latency routing | > **Tip:** Your account must have a Call Control Application and Billing Group configured before you can purchase DID numbers. Contact your account manager if these are missing. # Call Settings Source: https://docs.pingtree.com/documentation/call-management/call-settings Configure call recording, TTS greetings, hold audio, and recording retention for each campaign source. Call Settings control how inbound calls behave once they reach a DID number assigned to a source. Settings are configured **per campaign source**, so different sources within the same campaign can have independent recording policies, greetings, and audio configurations. Call configuration with enable calling, recording, retention, greeting text, and waiting audio ## Accessing Call Settings Call Settings are found inside the source detail view for any source that has a DID number assigned. Navigate to your campaign, open the source, and select the **Manage Calls** section in the left sidebar. From there, you'll see five tabs: ### Phone Numbers Assign and manage DID numbers for this source. Each source can have multiple numbers assigned. Phone Numbers tab showing assigned DID numbers with status and release option ### Enrichment API A dedicated API endpoint for enriching call lead data with additional fields. Includes authentication tokens and example requests. Enrichment API endpoint with authentication token, GET and POST request examples ### Integrations Enable or disable third-party validation services for call leads at the source level — including Blacklist Alliance (DNC checking), Debt Amount qualification, and Array credit pulls. Source-level call integrations with Blacklist Alliance, Debt Amount, and Array API ### Filters & Conditions Set call caps (global, monthly, weekly, daily, hourly), configure source operating hours by day of week, and define call filter rules based on conditions like state or area code. Call conditions and filters with source caps, time settings, and filter rules ## Call Routing Call routing determines which buyer receives each inbound call. Unlike source-level settings above, routing is configured at the **campaign level** under **Distribution > Call Routing Logic**. Call Routing Logic with endpoint priority, weight, and routing plan configuration ### How Call Routing Works When an inbound call arrives on a DID number, Pingtree evaluates the routing plan from top to bottom: 1. **Available Endpoints** — the left panel shows all calling-enabled buyer endpoints in your campaign. Drag an endpoint into the Routing Plan to include it. 2. **Routing Plan** — the right panel lists the active routing order. Calls are offered to endpoints starting from the top. 3. **Priority** — endpoints with a lower priority number are tried first. Multiple endpoints can share the same priority level. 4. **Weight** — when two or more endpoints share the same priority, weight determines how traffic is distributed between them. Higher weight means more calls. 5. **Trigger API** — optionally enable a trigger that fires a postback when a call is routed to this endpoint. ### Enabling Call Routing Toggle **Enable Call Routing** at the top right of the page to activate the routing plan. When disabled, inbound calls will not be transferred to any buyer. After arranging your endpoints, click **Save Routing Plan** to apply changes. The new routing order takes effect immediately for all future calls. > **Tip:** Use priority tiers to create fallback routing. For example, set your primary buyer at priority 1 and a backup buyer at priority 2 — if the primary doesn't answer, the call automatically falls through to the backup. ## Enabling Call Recording Toggle **Recording Enabled** to capture inbound calls on that source. When recording is enabled: * All inbound calls on assigned DID numbers are recorded automatically. * Recordings are captured in **MP3 format** with **dual-channel audio** — the caller and the connected buyer are recorded on separate tracks. * A recording retention period must be set (see [Recording Retention](#recording-retention) below). * Toggling recording off disables capture for future calls but does not delete existing recordings. > **Tip:** Enabling recording on a source automatically applies the recording configuration to every DID number assigned to that source via Telnyx. No per-number setup is required. ## Greeting Configuration The greeting is the first message a caller hears when they dial your DID number. It is synthesized using Text-to-Speech (TTS) via Telnyx. | Field | Description | | -------------------------- | --------------------------------------------------------------- | | **Greeting Text** | The primary message read to the caller when the call connects | | **Fallback Greeting Text** | A backup message used if the primary greeting fails to generate | | **TTS Voice** | The voice used to synthesize the greeting audio | ### Choosing a TTS Voice Click **Select Voice** to open the voice browser. Voices are grouped by provider and language. Use the **Preview** button next to any voice to hear a short sample synthesized with your greeting text before committing to a selection. > **Tip:** Write greeting text in natural spoken language. Avoid special characters, abbreviations, and URLs — TTS engines read these literally. For example, write "contact us at eight hundred five five five one two three four" rather than "call 1-800-555-1234". ## Ending Text The ending message plays to the caller after the call transfer completes or before the call is disconnected. | Field | Description | | ------------------------ | ----------------------------------------------------- | | **Ending Text** | Message played at the conclusion of the call | | **Ending Fallback Text** | Backup message if primary ending text synthesis fails | Use the ending message to thank the caller, provide reference information, or set expectations for a callback. ## Hold / Waiting Audio Hold audio plays while Pingtree is routing the call to a buyer. You can select from uploaded audio files in your media library. 1. Open the **Waiting Audio** dropdown. 2. Select an audio file from your organization's media library. 3. Save the settings. To add a new audio file, navigate to **Call Management > Media** and upload an MP3, WAV, or OGG file (maximum 10 MB). Files uploaded there become immediately available in the Waiting Audio dropdown. > **Tip:** Use hold music or a branded on-hold message to keep callers engaged while routing occurs. Silence during routing can cause callers to hang up. ## Recording Retention Recording retention controls how long call recordings are stored. Longer retention periods carry a higher cost multiplier on the per-minute recording charge. | Key | Duration | Cost Multiplier | | ---------- | --------- | --------------- | | `30d` | 30 days | 0.80x | | `3m` | 3 months | 1.00x | | `6m` | 6 months | 2.00x | | `9m` | 9 months | 3.00x | | `12m` | 12 months | 4.00x | | `lifetime` | Lifetime | 5.00x | The default retention when recording is first enabled is **30 days (0.80x)**. You can change this at any time; the new setting applies to recordings created after the change. > **Tip:** For compliance-sensitive verticals (insurance, financial services, healthcare), consider a 3-month or longer retention period. For general quality assurance, 30 days is a practical and cost-effective default. Recordings past their retention window are automatically deleted and marked accordingly in the call record. ## Call Control Application The **Call Control Application** is the Telnyx application that handles real-time call events for your organization. It is configured at the organization level and shared across all DID numbers. This field is read-only in the source Call Settings view. If the Call Control Application is not configured for your organization, number purchases and call routing will not work. Contact your account manager to have this set up. ## Testing a Phone Line Before sending live traffic to a newly configured source, test the end-to-end call flow: 1. Ensure a DID number is assigned to the source and its status is **Active**. 2. Call the DID number from a mobile phone. 3. Verify the greeting message plays correctly. 4. Confirm hold audio plays during routing. 5. Check that the call connects to the expected buyer number. 6. Review the call record in the campaign data tab to confirm the lead was created and attributed correctly. > **Tip:** Make a test call with recording enabled to verify that the recording is captured and accessible from the lead record before going live with a new source. # DID Numbers Source: https://docs.pingtree.com/documentation/call-management/did-numbers Purchase, assign, and manage Direct Inward Dialing phone numbers for your call campaigns. DID (Direct Inward Dialing) numbers are the phone numbers callers dial to reach your campaign. Pingtree purchases and manages these numbers through Telnyx on your behalf. From the DID Numbers page you can search for available numbers, purchase them, assign them to sources, and release them when they are no longer needed. DID Numbers list with purchased numbers, status, and campaign assignments Search and Buy Numbers modal with country, type, and area code filters ## Number Types Pingtree supports two types of DID numbers: | Type | Area Codes | Typical Use | | --------- | --------------------------------- | ------------------------------------------------------------- | | Local | Any standard geographic area code | Geo-targeted campaigns requiring a familiar local presence | | Toll-Free | 800, 833, 844, 855, 866, 877, 888 | National campaigns where callers expect a free-to-dial number | Upfront and monthly charges differ between local and toll-free numbers. The current pricing for your organization is displayed in the search results before you confirm a purchase. ## Number Statuses Every DID number moves through a status lifecycle: | Status | Meaning | | ------------- | ---------------------------------------------------------------------- | | **Pending** | The order has been placed with Telnyx and is being provisioned | | **Available** | The number is active on Telnyx but not yet assigned to any source | | **Active** | The number is assigned to a campaign source and ready to receive calls | | **Failed** | The Telnyx order failed; the number cannot be used | | **Released** | The number has been returned to Telnyx and permanently removed | > **Tip:** Numbers typically move from Pending to Available within seconds of purchase. Pingtree polls Telnyx automatically after the order is placed so the status updates without a manual refresh. ## Purchasing a Number Before purchasing, make sure your organization has a **Call Control Application** and a **Billing Group** configured. These are required for Telnyx to route calls correctly. 1. Click **Search Numbers** to open the number search modal. 2. Choose **Local** or **Toll-Free** as the number type. 3. Enter an **area code** to search for available numbers in that region. 4. Review the results. Each result shows the phone number, region information, and the upfront and monthly costs that will be charged to your wallet. 5. Click **Purchase** next to the number you want. 6. Confirm the purchase. The upfront cost is deducted from your wallet immediately. > **Tip:** Ensure your wallet has sufficient balance before purchasing. The system checks your balance before placing the order and will decline the purchase if funds are insufficient. After purchase, the number appears in your DID Numbers list with a status of **Pending**, then **Available** once Telnyx confirms provisioning. ## Assigning a Number to a Source An **Available** number must be assigned to a campaign and source combination before it can receive traffic. Only unassigned numbers (those with no campaign or source attached) appear in the assignable list. 1. Go to the campaign source where you want to enable call tracking. 2. Open the **Manage Calls** section for that source. 3. Select an available DID number from the dropdown. 4. Choose the campaign, source type, and optionally provide an internal label (Assigned Name) for easy reference. 5. Save the assignment. Once assigned, the number's status changes to **Active** and call routing is live. Recording settings from the source's call configuration are automatically applied to the number. ## Viewing All Numbers The DID Numbers list shows all numbers purchased by your organization, paginated and filterable: | Column | Description | | ------------ | ------------------------------------------------------ | | Phone Number | The E.164-formatted DID number | | Status | Current lifecycle status (color-coded badge) | | Campaign | The offer campaign this number is assigned to, if any | | Source | The campaign source this number is assigned to, if any | | Purchased By | The team member who placed the order | | Purchased At | Date and time of purchase | Use the **Status** filter to narrow the list to a specific lifecycle stage (e.g., show only Active numbers). You can also filter by **Campaign** to see all numbers attached to a particular offer. ## Releasing a Number Releasing permanently removes a number from your account and from Telnyx. Monthly charges stop after release. > **Important:** A number must be **unassigned** before it can be released. If the number is currently Active (assigned to a source), unassign it from the source's Call Settings first. 1. Locate the number in the DID Numbers list. 2. Click the **Release** action in the row menu. 3. Confirm the release in the dialog. The number is deleted from Telnyx and removed from your list. This action is irreversible — the number is returned to the Telnyx pool and may be reassigned to another customer. ## Assignable vs. Assigned Numbers | Category | Condition | Can Receive Calls? | | ---------- | --------------------------------------------------- | ------------------ | | Assignable | Status is Available, no campaign or source attached | No | | Assigned | Status is Active, linked to a campaign + source | Yes | Only **assignable** numbers appear in the source call settings dropdown. If a number you purchased does not appear in the dropdown, check that its status is **Available** and that it has not already been assigned elsewhere. # Real-Time Call Analytics Source: https://docs.pingtree.com/documentation/call-management/realtime-analytics Monitor live call traffic with auto-refreshing metrics, source breakdowns, and recent call activity. The Real-Time Call Analytics dashboard gives you an up-to-the-second view of inbound call performance. It is designed for call center operations where knowing what is happening right now — not ten minutes ago — is critical for managing quality and capacity. Real-time call analytics dashboard with live metrics ## Dashboard Overview The dashboard is organized into three sections: 1. **Summary metrics** — headline numbers for the selected date range and filters. 2. **Source breakdown** — per-source call performance for the active campaign. 3. **Recent calls** — a live feed of the most recent 25 calls with status and duration. ## Summary Metrics | Metric | Description | | -------------------- | ------------------------------------------------------------------- | | **Total Calls** | All inbound calls that arrived in the selected time window | | **Answered Calls** | Calls that were successfully connected to a buyer | | **Missed Calls** | Calls that were not answered (no buyer available or caller hung up) | | **Active Calls** | Calls currently in progress at the time of the last refresh | | **Total Duration** | Cumulative talk time for all answered calls | | **Average Duration** | Mean call length across answered calls | A call's status is determined in real time: * If `callEndedAt` is not set, the call is **Live** (active). * If the call ended and `isCallAnswered` is true, it is **Answered**. * If the call ended and `isCallAnswered` is false, it is **Missed**. ## Filtering Use the filters at the top of the dashboard to narrow analytics to a specific slice of traffic: | Filter | Effect | | -------------- | -------------------------------------------------------------------------- | | **Campaign** | Limits metrics to a single offer campaign | | **Source** | Further narrows to one source within the selected campaign | | **Date Range** | Defaults to Today; supports all standard relative and absolute date ranges | Changing any filter immediately triggers a fresh data fetch and resets the polling timer. > **Tip:** Select a specific source when monitoring a call center team's dedicated line. This isolates that source's performance from the rest of the campaign's traffic. ## Auto-Refresh (Real-Time Polling) The dashboard polls for new data automatically. Choose your refresh interval from the **Auto Refresh** dropdown: | Option | Interval | | ---------------- | -------------------- | | Off | No automatic refresh | | Every 3 Seconds | 3,000 ms | | Every 5 Seconds | 5,000 ms (default) | | Every 10 Seconds | 10,000 ms | Polling is paused automatically when you open a call recording playback modal and resumes when the modal is closed. This prevents data from refreshing underneath an open recording. The **last updated** timestamp in the toolbar shows exactly when the most recent data fetch completed. > **Tip:** Use **Every 3 Seconds** during peak hours or live campaigns where response time matters. Switch to **Every 10 Seconds** or **Off** during off-peak review sessions to reduce unnecessary network activity. ## Recent Calls Feed The recent calls table shows the last 25 calls matching your current filters. Each row displays: * **From** — the caller's phone number * **To** — the DID number that was dialed * **Status** — Live, Answered, or Missed (color-coded badge) * **Duration** — formatted as hours, minutes, and seconds (e.g., `2m 14s`) * **Started At** — the timestamp the call began The feed updates automatically with each polling cycle so new calls appear without a manual refresh. ## Use Cases ### Monitor Call Quality During a Live Campaign Set the auto-refresh interval to every 3 or 5 seconds. Watch the Answered vs. Missed ratio in real time. A rising Missed count may signal that buyer capacity needs to be increased or that routing rules need adjustment. ### Track Agent Performance Filter by a source tied to a specific agent or call center team. Compare their Answered Calls, Total Duration, and Average Duration against expectations. ### Identify Routing Issues Quickly If Active Calls is high but Answered Calls is not increasing, calls may be stuck in routing. Check buyer availability and routing rules in the campaign distribution settings. ### Capacity Planning Use Total Duration and Average Duration to estimate how many buyers or agents are needed for a given call volume. If average duration is 4 minutes and you expect 60 calls per hour, you need at least four concurrent buyer lines to avoid missed calls. ## Source Type Labels Sources appear in the campaign and source dropdowns using their display names. The dashboard maps internal source type codes to readable labels: | Internal Type | Display Label | | ------------- | ----------------- | | `marketer` | Marketing Partner | | `custom` | Custom Source | | `media` | Media Channel | # Balance & Payouts Source: https://docs.pingtree.com/documentation/campaign/Balance-and-Payouts Manage your campaign wallet, auto-recharge settings, withdrawal requests, settlements, and payment methods. ## Overview The **Balance & Payouts** section manages all financial operations tied to your campaign wallet. This includes topping up your balance to pay for leads, requesting withdrawals of earned funds, reviewing settlement history, and managing the payment methods connected to your account. *** ## Wallet System Every organization in Pingtree has a **wallet balance** that is used to pay for leads as they are processed. When a lead is accepted and distributed, the associated cost is deducted from the wallet automatically. | Concept | Description | | ------------------ | ---------------------------------------------------------------------- | | **Wallet Balance** | Current available funds in your organization's account | | **Lead Charge** | The amount deducted from the wallet each time a lead is processed | | **Low Balance** | When the wallet falls below a threshold, lead processing may be paused | > **Tip:** Set up auto-recharge to ensure your campaign never goes offline due to an empty wallet — especially during high-volume periods. *** ## Auto-Recharge Auto-recharge automatically tops up your wallet via Stripe when your balance drops below a set threshold. **To configure auto-recharge:** 1. Navigate to **Balance & Payouts** within your campaign. 2. Toggle on **Auto-Recharge**. 3. Set the **threshold amount** — the balance level that triggers a recharge (e.g., \$50). 4. Set the **recharge amount** — how much to add each time (e.g., \$200). 5. Confirm the payment card to charge. 6. Save your settings. Once enabled, Pingtree will automatically charge your default payment card whenever your balance hits the threshold, keeping your campaign running without interruption. *** ## Manual Recharge If you prefer to top up your wallet on demand, use the **Manual Recharge** option: 1. Click **Add Funds** or **Recharge Wallet**. 2. Enter the amount you want to add. 3. Select the payment card to charge. 4. Confirm the transaction. The funds will appear in your wallet balance immediately after the payment is processed. *** ## Withdrawal Requests If you have an available balance that you want to withdraw (for example, affiliate earnings or a refund), you can submit a withdrawal request. **To request a withdrawal:** 1. Navigate to **Balance & Payouts**. 2. Click **Request Withdrawal**. 3. Enter the withdrawal amount (must not exceed available balance). 4. Submit the request. ### Withdrawal Approval Workflow | Status | Description | | ------------ | ------------------------------------------------------------------ | | **Pending** | Your request has been submitted and is awaiting review | | **Approved** | The withdrawal has been approved and is being processed | | **Rejected** | The request was declined — check the reason and resubmit if needed | Withdrawal approvals are handled by your account admin or the Pingtree platform team depending on your organization's setup. *** ## Settlements Settlements allow you to reconcile outstanding balances with sources (such as marketing partners or affiliates) directly within Pingtree. **To create a settlement:** 1. Navigate to **Balance & Payouts** → **Settlements**. 2. Select the source with an outstanding balance. 3. Enter the settlement amount and any notes. 4. Submit the settlement for processing. Settlements are recorded in the transaction history and linked to the relevant source for audit purposes. *** ## Transaction History The **Transaction History** table shows a complete log of all wallet activity: | Column | Description | | ----------------- | ------------------------------------------------- | | **Date** | When the transaction occurred | | **Type** | Recharge, Lead Charge, Withdrawal, Settlement | | **Amount** | Dollar value of the transaction | | **Balance After** | Wallet balance immediately after this transaction | | **Reference** | Order ID, lead ID, or settlement reference | | **Status** | Completed, Pending, or Failed | Use the date range filter to narrow history to a specific period. You can also export the transaction log as a CSV for reconciliation. *** ## Stripe Express Accounts To receive payouts directly from Pingtree, you need a connected **Stripe Express account**. This allows Pingtree to transfer funds to your bank account securely. **To connect a Stripe Express account:** 1. Navigate to **Balance & Payouts** → **Payout Account**. 2. Click **Connect with Stripe**. 3. Follow the Stripe onboarding flow to link your bank account. 4. Once connected, approved withdrawals will be deposited directly to your bank. *** ## Payment Cards Management Manage the payment cards used for wallet recharges: * **Add a Card** — Add a new credit or debit card via the secure Stripe payment form. * **Remove a Card** — Delete a card that is no longer in use. * **Set Default Card** — Designate which card is used for auto-recharge and manual top-ups. > **Note:** Card details are stored and processed securely by Stripe. Pingtree does not store raw card numbers on its servers. # Campaign Financial Overview Source: https://docs.pingtree.com/documentation/campaign/Financial Detailed financial reporting for a campaign including revenue, cost, profit, and buyer-level breakdowns. ## Overview The **Campaign Financial Overview** gives you a comprehensive view of the money flowing through your campaign. It breaks down revenue, costs, and profit across time periods, sources, and buyers — so you always know where your margins stand and where to focus optimization efforts. Campaign financial overview with revenue, cost, and profit charts *** ## Balance Report The balance report provides a high-level summary of your campaign's financial position over the selected date range: | Metric | Description | | ----------------- | -------------------------------------------------- | | **Total Revenue** | Sum of all revenue earned from sold leads | | **Total Cost** | Sum of all costs attributed to traffic acquisition | | **Profit** | Total Revenue minus Total Cost | | **Profit Margin** | Profit as a percentage of Total Revenue | Use the date range selector to view these figures for any custom period — daily, weekly, monthly, or a custom window. > **Tip:** Switch to a monthly view at the end of each month to quickly reconcile your campaign P\&L without needing to export data. *** ## Time-Series Balance Report Below the summary cards, a **graph view** plots revenue, cost, and profit over time. This lets you: * Identify trends and seasonal patterns in your campaign performance * Spot days or weeks where costs spiked without a matching revenue lift * Compare performance across multiple time periods visually The graph can be toggled between: * **Daily** — Each data point represents one day * **Weekly** — Data is aggregated by week * **Monthly** — Data is aggregated by month *** ## Distribution Overview (Buyer-Level Breakdown) The distribution section breaks financial performance down by individual buyers (distribution endpoints): | Column | Description | | ------------------- | ------------------------------------------- | | **Buyer Name** | The name of the endpoint or advertiser | | **Leads Delivered** | Total number of leads sent to this buyer | | **Revenue** | Revenue earned from this buyer | | **Cost** | Cost attributed to leads sent to this buyer | | **Profit** | Revenue minus Cost for this buyer | | **Margin** | Profit margin percentage for this buyer | Use this view to identify which buyers are your most profitable and which ones may need renegotiated rates or additional filters. *** ## Source-Wise Financial Breakdown The source-level breakdown shows how each traffic source contributes to your campaign's financials: | Column | Description | | ------------------- | ------------------------------------------------- | | **Source Name** | Name of the source (CS, MP, or MC) | | **Source ID** | Unique identifier (e.g., `cs101`, `mp55`, `mc12`) | | **Leads Generated** | Total leads from this source | | **Revenue** | Revenue attributed to this source | | **Cost** | Cost for this source's traffic | | **Profit** | Net earnings from this source | This view is useful for identifying high-cost, low-conversion sources that may be dragging down overall campaign profitability. *** ## Profit Margin Tracking Pingtree tracks profit margin at the campaign level, buyer level, and source level simultaneously. This lets you: * Identify thin-margin buyers and renegotiate prices * Spot high-cost sources and reduce spend or optimize targeting * Monitor overall campaign health with a single percentage figure *** ## Exporting Financial Data You can export any financial report as a **CSV file** for use in spreadsheets, accounting tools, or external reporting: 1. Apply your desired date range and filters. 2. Click the **Export** button in the top-right of the financial section. 3. The export will be generated and delivered via in-app notification and email. > **Note:** CSV exports include all columns currently visible in the table. Customize your column selection before exporting to get exactly the data you need. *** ## Best Practices * Review the time-series graph weekly to catch margin compression early. * Use the buyer-level breakdown to prioritize your highest-margin distribution endpoints. * Export monthly financials to keep a historical record outside of Pingtree for accounting purposes. # Campaign Overview Source: https://docs.pingtree.com/documentation/campaign/Overview Real-time performance dashboard showing clicks, conversions, revenue, and traffic flow for a campaign. ## Overview The **Campaign Overview** is the first page you see when you open a campaign. It gives you a live snapshot of how your campaign is performing — from top-level revenue and conversion metrics down to individual source traffic flows. Use this page to quickly assess campaign health, spot anomalies, and navigate to any area of the campaign that needs attention. Campaign overview dashboard with real-time metrics and source flow visualization *** ## Date Range Selector All data on the overview dashboard is filtered by the selected date range. Use the date picker in the top-right to choose: * **Presets**: Today, Yesterday, Last 7 Days, Last 30 Days, This Month, Last Month * **Custom Range**: Select any start and end date The dashboard refreshes automatically when you change the date range. *** ## Performance Metrics The headline metrics section displays the most critical numbers at a glance: | Metric | Description | | --------------- | -------------------------------------------- | | **Clicks** | Total number of inbound click events | | **Forms** | Total completed form submissions | | **Conversions** | Leads that converted (sold or completed) | | **Revenue** | Total revenue generated from sold leads | | **Cost** | Total cost attributed to traffic acquisition | | **Profit** | Revenue minus Cost | | **Margin** | Profit as a percentage of Revenue | *** ## Key Performance Ratios Below the headline metrics, you'll find calculated ratios that help you evaluate efficiency: | Metric | What It Means | | ------- | -------------------------------------------------------------------- | | **CVR** | Conversion Rate — percentage of clicks that resulted in a conversion | | **CPC** | Cost Per Click — average cost for each click event | | **CPL** | Cost Per Lead — average cost to generate each lead | | **CPA** | Cost Per Acquisition — average cost for each converted lead | | **RPC** | Revenue Per Click — average revenue earned per click | | **RPA** | Revenue Per Acquisition — average revenue per converted lead | > **Tip:** A widening gap between CPL and RPC is an early warning sign that your traffic costs are outpacing revenue. Use these ratios daily to catch issues before they compound. *** ## Source Flow Visualization The **Source Flow** section shows a visual diagram of how traffic enters and moves through your campaign: * Each source (CS, MP, or MC) is shown as a node. * Arrows indicate traffic flowing from source to distribution endpoints. * Click any node to drill into that source or endpoint's performance. This visualization helps you identify which sources are driving the most volume and how leads are distributed across buyers. *** ## Traffic Analysis by Source Type The traffic breakdown table segments performance by source type: | Source Type | Label | Description | | --------------------- | ----- | -------------------------------------------------------------- | | **Custom Source** | CS | Manually created sources (e.g., CSV uploads, internal traffic) | | **Marketing Partner** | MP | External affiliates and publishers sending leads | | **Media Channel** | MC | Ad platform integrations (Meta, Google, TikTok) | Each source type row shows clicks, conversions, revenue, cost, and margin, giving you an at-a-glance read on which traffic tier is performing best. *** ## Quick Navigation Links The overview includes quick links to jump to key campaign sections: * **Campaign Settings** — Configure timezone, dedupe, domains, and integrations * **Reports** — Access transaction, conversion, and buyer reports * **Distribution** — Manage routing logic and endpoints * **Sources** — Add or configure traffic sources * **Funnel Builder** — Edit landing pages and form flows *** ## Real-Time Refresh The overview updates in real time as new leads enter the campaign. You do not need to manually refresh the page to see the latest data. # Create a Campaign Source: https://docs.pingtree.com/documentation/campaign/create-campaign Step-by-step guide to creating a new campaign in Pingtree, from naming to initial configuration. ## Overview Creating a campaign in Pingtree takes just a few minutes. Once created, your campaign gets a unique **Campaign ID (CID)** — such as `cp100` — that identifies it across the entire platform. After creation, you can layer in sources, distribution, funnels, and settings at your own pace. > **Video Walkthrough:** A step-by-step video guide for this feature is coming soon. Campaign creation wizard first step *** ## Before You Start Have the following ready before creating your campaign: * A clear campaign name (e.g., "Auto Insurance — Q3 2025"). * An understanding of what lead type you're running (form lead, click, ping-post). * Optionally, a campaign category if you're organizing by vertical or brand. *** ## Steps to Create a Campaign From the **Campaign Manager** page, click the **Create Campaign** button in the top-right corner. You can also find this option in the sidebar navigation. Give your campaign a clear, descriptive name. Add an optional description to note the goals, vertical, or any relevant context for your team. Assign the campaign to an existing category (e.g., "Insurance", "Solar", "Finance") to keep your list organized. You can create a new category directly from this dropdown if needed. Select the type of lead generation your campaign will use: | Type | Description | | ------------- | -------------------------------------------- | | **Form Lead** | Leads are submitted via a web form | | **Click** | Traffic is redirected to an offer or listing | | **Ping-Post** | Leads are auctioned to buyers in real time | Set foundational options for the campaign: * **Timezone** — Choose the timezone used for reporting and scheduling (e.g., US/Eastern). * **Dedupe Rules** — Define how duplicate leads are detected and handled (e.g., deduplicate by email within 30 days). A database source stores all lead data collected by this campaign. You can create a new database source or link the campaign to an existing one. This step can also be completed after campaign creation. Add brand assets to personalize the campaign experience: * **Logo** — Displayed on funnel pages and source portals. * **Hero Image** — Used as the main visual on landing pages. * **Landing URL** — The primary destination URL for this campaign's traffic. > **Tip:** Brand settings are especially useful if you manage multiple brands within one Pingtree account, as they keep your partner-facing pages consistent. Click **Create Campaign** to finalize. Pingtree will generate a unique **Campaign ID (CID)** for this campaign — for example, `cp100`. This ID is used across tracking links, API calls, and reports. *** ## What Happens After Creation Once your campaign is created, you'll land on the **Campaign Overview** page. From here you can configure: | Section | What to Set Up | | ------------------ | --------------------------------------------------------- | | **Sources** | Add custom sources, marketing partners, or media channels | | **Distribution** | Configure endpoints, routing rules, and ping-post buyers | | **Funnel Builder** | Build landing pages and form flows | | **Settings** | Fine-tune campaign behavior, compliance, and API keys | > **Tip:** You don't need to configure everything before going live. A campaign with a source and a distribution endpoint is enough to start receiving and routing leads. *** ## Campaign ID Format Every campaign is automatically assigned a unique Campaign ID when created. This ID follows the format: ``` cpXXX ``` Examples: `cp100`, `cp101`, `cp205` This ID is used in: * API calls to submit or retrieve leads * Tracking links for source attribution * Reports and logs to identify which campaign a lead belongs to # Creative Performance Source: https://docs.pingtree.com/documentation/campaign/creative-performance Analyze and compare creative performance metrics to identify top-performing assets and optimize your media strategy. ## Overview The **Creative Performance** page gives you data-driven insight into how each creative asset is performing across your campaign. Compare creatives side by side, identify top performers, and make informed decisions about where to invest your media budget. *** ## Performance Metrics Per Creative Each creative in the table is accompanied by the following performance metrics: | Metric | Description | | --------------- | ---------------------------------------------------- | | **Impressions** | Total number of times the creative was shown | | **Clicks** | Total clicks generated by this creative | | **CTR** | Click-through rate (Clicks ÷ Impressions) | | **Forms** | Leads submitted via this creative | | **CVR** | Conversion rate (Forms ÷ Clicks) | | **Revenue** | Total revenue attributed to leads from this creative | | **Cost** | Total spend associated with this creative | | **Profit** | Revenue minus Cost | | **CPC** | Cost per click for this creative | | **CPL** | Cost per lead generated by this creative | *** ## Filtering Performance Data Use the filters at the top of the page to focus your analysis: * **Date Range** — Select a custom date range or use presets (Today, Last 7 Days, Last 30 Days). * **Source Filter** — View performance data for creatives from a specific source (CS, MP, or MC). * **Buyer Filter** — See how creatives performed against a specific buyer or advertiser. * **Platform Filter** — Filter by the ad platform the creative ran on (Meta, Google, TikTok). * **Creative Type** — Filter to show only images, videos, or text creatives. *** ## Comparing Creatives Side by Side Pingtree's **creative comparison** tool lets you evaluate two or more creatives simultaneously: 1. Select the creatives you want to compare using the checkboxes in the creatives list. 2. Click **Compare Selected**. 3. A comparison panel opens, showing each selected creative's metrics in parallel columns. 4. Identify which creative leads on each metric (the better value is highlighted). This is particularly useful when running A/B tests — you can quickly determine a winner without manually cross-referencing separate reports. *** ## Creative A/B Testing Insights When you run multiple creative variants for the same ad objective, Pingtree surfaces A/B insights: * **Winner Indication** — The creative with the best CVR or CPL is flagged as the top performer. * **Statistical Confidence** — Based on volume, Pingtree indicates how confident it is in the comparison result. * **Lift Percentage** — Shows the percentage improvement one creative has over another. > **Tip:** A/B tests need sufficient volume to be statistically meaningful. As a general rule, wait until each variant has at least 200–300 clicks before calling a winner. *** ## Performance Breakdown by Ad Platform The platform breakdown view segments creative performance by the ad network the creative ran on: | Platform | Metrics Available | | ----------------------------- | ------------------------------------------------- | | **Meta (Facebook/Instagram)** | Impressions, Clicks, Spend, Leads, CPL, CVR | | **Google Ads** | Clicks, Impressions, Spend, CTR, CPC, Conversions | | **TikTok** | Video Views, Clicks, Spend, CPL, Conversions | Switch between platform tabs to see how the same creative performs across different channels. A creative that underperforms on Google may be a strong performer on Meta — platform-level data reveals this. *** ## Identifying Top-Performing Creatives Use the **sort and filter** controls to surface your best creatives: * **Sort by CVR (Descending)** — Find the creatives with the highest conversion rates. * **Sort by Profit (Descending)** — Surface the most profitable creatives. * **Sort by CPL (Ascending)** — Identify the most efficient lead-generation creatives. * **Filter by Status = Active** — Focus only on creatives currently running. > **Tip:** Export your top-performing creative data monthly. Over time, this builds a reference library of what works in your vertical — invaluable when briefing your design or media team on new creative production. *** ## Identifying Underperforming Creatives Underperforming creatives waste budget and drag down campaign averages. Quickly find them by: * **Sorting by CPL (Descending)** — Creatives with the highest cost per lead appear at the top. * **Sorting by CVR (Ascending)** — Low-converting creatives surface first. * **Filtering by Spend > \$X and Conversions = 0** — Find creatives that have spent budget but generated no leads. Once identified, consider pausing these creatives directly from the Creative Performance view using the **Pause** action in the row menu. *** ## Exporting Performance Data Export creative performance data as a CSV for external analysis or client reporting: 1. Apply your desired filters and date range. 2. Click the **Export** button. 3. The file will be delivered via in-app notification and email. Exported data includes all visible columns, so customize your column selection before exporting. *** ## Best Practices * Review creative performance weekly during active campaigns, not just at the end of a flight. * Use the platform breakdown to reallocate budget toward the channel where each creative performs best. * Retire creatives with consistently high CPL after sufficient test volume — do not let them drain budget indefinitely. * Document winning creative characteristics (format, message, imagery) to inform future creative briefs. # Campaign Creatives Source: https://docs.pingtree.com/documentation/campaign/creatives Manage, control, and distribute creative assets at the campaign level including images, videos, and buyer visibility settings. ## Overview The **Campaign Creatives** section is where you manage all creative assets associated with a specific campaign. This includes images, videos, and text-based creatives used across your media buying efforts, affiliate partnerships, and funnel pages. From this view you can control which buyers see which creatives, share assets with marketing partners, and push creatives directly to your connected ad platforms. *** ## Viewing Campaign Creatives All creatives assigned to your campaign are listed in a grid or table view. Each entry shows: | Field | Description | | ------------------- | ------------------------------------------- | | **Creative Name** | Display name of the creative asset | | **Type** | Image, Video, or Text | | **Status** | Active or Paused | | **Assigned Buyers** | Which buyers can view this creative | | **Platforms** | Ad platforms this creative is pushed to | | **Date Added** | When the creative was added to the campaign | Use the search bar and type/status filters to find specific creatives quickly. *** ## Creative Types Pingtree supports three types of creative assets at the campaign level: | Type | Description | Common Use | | --------- | ---------------------------------- | ------------------------------------- | | **Image** | Static image files (JPG, PNG, GIF) | Banner ads, landing page headers | | **Video** | Video files or URLs | Social media ads, pre-roll placements | | **Text** | Ad copy, headlines, descriptions | Search ads, native ad text | *** ## Buyer-Specific Creative Visibility Not every creative should be visible to every buyer. Pingtree lets you control exactly which buyers can see which creatives: * **Assign to Buyers** — Specify which buyers or advertisers have access to a creative. * **Default Visibility** — Set whether a creative is visible to all buyers by default or restricted to specific ones. * **Buyer Blocklist** — Prevent specific buyers from seeing a creative, even if they have general access to the campaign. This is particularly useful when running creatives that are exclusive to a specific advertiser or when creative rights are limited to certain distribution partners. ### Blocking a Creative from a Buyer 1. Open the creative from the campaign creatives list. 2. Navigate to the **Buyer Visibility** tab. 3. Find the buyer you want to block. 4. Toggle **Block** for that buyer. 5. Save the settings. The creative will no longer appear in that buyer's reporting or be attributed to their traffic. *** ## Sharing Creatives with Affiliates and Marketing Partners Marketing partners (affiliates) can be given access to download and use creatives for their own traffic: 1. Open the creative you want to share. 2. Navigate to the **Sharing** tab. 3. Select the marketing partners or affiliate groups to share with. 4. Partners will see the creative in their affiliate portal and can download it directly. > **Tip:** Sharing creatives with your marketing partners saves time and ensures brand consistency — partners use the exact assets you've approved rather than creating their own. *** ## MAID Mapping (Mobile Advertising IDs) **MAIDs (Mobile Advertising IDs)** are unique device identifiers used to link mobile ad exposures to lead conversions. Pingtree allows you to map MAIDs to specific creatives: 1. Open the creative. 2. Navigate to the **MAID Mapping** tab. 3. Upload or enter the MAID values associated with this creative. 4. Save the mapping. When a lead arrives with a matching MAID, Pingtree attributes it to the correct creative for performance reporting. *** ## Pushing Creatives to Ad Platforms If you have ad platforms connected via Media Buying (Meta, Google, TikTok), you can push creatives directly from Pingtree to those platforms: 1. Open the creative you want to push. 2. Click **Push to Platform**. 3. Select the ad platform and account to upload to. 4. Review the asset and confirm. Pingtree will upload the creative to the selected ad account, where it will be available to use in your ad campaigns. *** ## Custom Creative Fields Each campaign can have its own set of **custom creative fields** — additional metadata you want to track per creative: * Examples: Campaign Code, Creative Theme, Target Demographic, Approval Status * Custom fields are configured in campaign settings and appear as editable columns in the creatives list. * Use custom fields to tag and filter creatives for internal workflow management. *** ## Best Practices * Name creatives consistently (e.g., `[Platform]_[Size]_[Version]_[Date]`) to make the list easy to scan. * Use the buyer blocklist to protect exclusive creatives from being attributed to the wrong buyers. * Push creatives to ad platforms through Pingtree to keep your creative library and ad accounts in sync. * Map MAIDs early in the campaign lifecycle to ensure mobile attribution is captured from day one. # Data Overview Source: https://docs.pingtree.com/documentation/campaign/data/data-overview View, filter, and export real-time click and form data for your campaigns. The Data tab surfaces every click and form event flowing through a campaign in real time. It acts as a living ledger: users can search, filter, export, or take row-level actions without leaving the page. The layout mirrors other Pingtree modules, providing a familiar experience. analytics **Elements & Features** 1. **Global Search**\ Instantly narrow results by typing name, mobile, email, or transaction ID. 2. **Headline Counters**\ Real-time totals for Clicks, Forms, and Conversions. Adjust dynamically with filters. 3. **View Toggle (Clicks / Forms)**\ Switch between raw click events and completed form submissions. 4. **Columns Button**\ Open a side drawer to toggle visibility and re-order fields. Save views for later use. 5. **Filters Button**\ Launches a panel with preset dropdowns (Source, Advertiser, Events) and a custom builder using key ▸ operator ▸ value logic. 6. **Date Range Picker**\ Choose from relative (e.g., Today, Last 7 Days) or absolute date ranges. Campaign timezone is respected. 7. **Export Button**\ Generates a CSV export (max 100,000 rows) using applied filters. Delivered via in-app notification and email. 8. **Results Grid**\ A fully virtualized, infinite-scroll table with live refresh. 9. **Row Actions Menu**\ Context-specific actions like: * Request Logs: View full request/response JSON * Distribution Logs: Clone form for routing test * View Form * Edit analytics **Working with the Grid** * **Clicks vs Forms View**\ Clicks show every inbound event, even if the form was not completed.\ Forms represent completed submissions (collapsed across multiple clicks). analytics * **Choosing Columns**\ Click the Columns button to toggle visibility or re-order fields.\ Save View stores your layout for future sessions. * **Date Range Picker**\ Defaults to the last 30 days. Use presets or define a custom start–end range.\ Click Apply to refresh or Clear to reset. analytics * **Exporting**\ CSV exports use UTF-8 encoding and reflect currently visible columns.\ Limit: 100,000 rows. Use filters to narrow results.\ Download links are sent via notification and email. * **Filtering Data** analytics | Filter Type | Behavior | | ---------------- | -------------------------------------------------------------------------------- | | Preset dropdowns | Multi-select chips for Source, Advertiser, and Events | | Custom Filters | Use key/operator/value logic with support for text, numeric, and date conditions | | Reset | Click "Clear All Filters" to wipe filters without refreshing the page | **Common Workflows** * **Quick Audit** * Switch to Forms view * Set Date Range to "Yesterday" * Open Filters → Events = Base Click Sold * Review data or Export for compliance checks * **Creating a Custom View** * Enable relevant columns * Rearrange using drag-and-drop * Save View (e.g., “Buyer QA”) * Automatically reloads next visit **Permissions & Visibility** | Role | Capabilities | | --------- | ------------------------------------ | | Admin | Full access to all actions | | Buyer | Read-only access to their leads only | | Affiliate | Clicks view only, no export access | **Best Practices** * Save different views for QA, Compliance, and Finance to streamline workflows * Limit exports to under 100k rows to prevent timeouts; split larger data pulls into monthly chunks # Request Logs Modal Source: https://docs.pingtree.com/documentation/campaign/data/data-request-logs View backend logs, clicks, consents, and session history for individual transactions. Opening **Actions ▸ Request Logs** on any row launches a modal exposing every backend call, state change, and visitor interaction tied to the selected transaction. This tool supports rapid troubleshooting before escalating issues to Support. analytics **Navigation Tabs** | Tab | What It Shows | Typical Use Case | | ------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------- | | Request Logs | Server-side logs during lead lifecycle. Displayed in accordion layout. | Identify posting failures, latency issues, or payout mismatches. | | Click Listing | All clicks tied to the same visitor fingerprint (IP, UTM, device, referrer). | Debug duplicate submissions or attribution issues. | | Consent Management | Consent flags for TCPA, CCPA, GDPR, cookie consent, etc. | Validate compliance evidence in disputes. | | Transaction History | Event timeline and optional session replay of form activity. | Reconstruct user journey or verify UX issues. | **Request Logs Tab – Accordion Layout** | Section | Contents | | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | | Transaction Details | Full JSON of click/form submission. Includes geo, device, custom fields. Copy to clipboard available. | | Distribution Logs | One row per endpoint in the routing plan. Columns: Endpoint, Filtered (yes/no), Response, Response Time, Response Amount. | | Payout Logs | Timeline of payout decisions, including overrides and adjustments. | | Array Credit Report | Raw response from the Array API (if enabled). | | Form Update API | Shows PATCH requests from CRMs or downstream services. | | Click Script Click | Captures browser-side click beacons with metadata. | | API Logs | Separate sections for Array API, Credit API, Sold Lead API, Lead Submit API, and Distribution Posting API. Useful for isolating external issues. | Tip: Use the blue “+” icons to expand/collapse sections. The modal remembers which sections are open when switching tabs. **Transaction History Tab – Session Replay** If recording is enabled for the campaign, a playback bar appears at the top. The session replay captures: * Keystrokes * Field validation errors * Button clicks Useful for validating fraud patterns or form UX bugs. **Permissions & Audit Logging** | Role | Access Notes | | ----- | --------------------------------------------------------------------- | | Admin | Full access to all tabs | | QA | Full access | | Buyer | Limited to their own leads, no session replay | | All | All view/copy activity is written to the Audit Trail for traceability | **Best-Practice Workflow** 1. Open Request Logs from Actions menu on the suspicious lead. 2. Expand **Distribution Logs** to confirm routing logic and endpoint behavior. 3. Jump to **Click Listing** to validate UTM/referrer integrity. 4. Open **Consent Management** and screenshot flags as needed. 5. Switch to **Transaction History** to replay the session. These steps typically resolve most integrity, delivery, or compliance concerns within minutes. # Click Routing Distribution Logic Source: https://docs.pingtree.com/documentation/campaign/distribution/click-routing Overview of routing distribution methods in Pingtree and how to access them. # Click Routing ## The Basics In lead distribution, there are multiple ways a lead can travel from its origin to its final destination. **Click Distribution routing** defines the method by which leads will be redirected, which can be based on routing rules and/or filters set within the Click Setting of an Endpoint. Click distribution overview ## Example Scenario Imagine you need Lead A who lives in California to land on a specific form that's targeting California Audiences, and you have Lead B whom you aren't too focused on but do want to determine where that lead should be redirected to. You could: * Create 2 Endpoints * Endpoint A will have click setting mapped to a specific form url, and in the filter setting of the endpoint, you will geo restrict the endpoint to only allow leads that are from a certain geolocation (which can be determined by our software, or can be overridden by user values) * Endpoint B will act as a failsafe and have an Offer Wall link set in its Click Routing * You can now add Endpoint A to the Click Routing's Base Routing, and Endpoint B to the Click Routing's Failover Routing This will allow the lead to now be redirected to the correct link depending on where they're located. ## Redirection Pingtree supports source-based redirection through the sources tab within a Campaign. There are many settings and tabs which are documented in our Sources section. We're going to be focusing on the 'Tracking Link' tab. ### Tracking link Within the Tracking Link tab of the source view, you will see all your sources listed and paginated if you have many sources (Media Channels, Marketing Partners, Custom Sources) within your account. Every source by default will be assigned the 'Direct Sell' type, which is the type that is required for Click Routing to function. Now that the redirection type has been set, you can use your sources redirect link to now use the click routing distribution Click Routing Source Selection ### Use Cases These are common implementations for routing leads using eConsent logic and dynamic redirects: * **Conditional Routing by State**\ Route a lead to a specific **Form** or **Offer Wall** based on their state (e.g., send CA leads to `formA`, all others to `wallB`). * **Failover Logic**\ If a lead meets certain conditions (like matching TCPA criteria or scoring high on lead quality), route them to the **primary form**. Otherwise, redirect them to a **fallback destination** like an alternate offer or a "not eligible" page. * **A/B Testing Forms & Offer Walls**\ Dynamically serve different **Form** or **Offer Wall** variations based on the lead’s source, allowing for performance optimization and conversion rate testing. * **Cap-Based Testing**\ Limit the number of leads that are sent to a specific **Click Destination** using the `Caps & Hours Filter` found in the **Click Routing Filters** tab of the endpoint. This is ideal for traffic shaping, load testing, or pacing delivery. ## Troubleshooting If you need to confirm whether a lead engaged with our **Click Routing**, you can inspect the activity via the **Data** tab of your campaign. Look for the **Tracking Link** tab as shown in the screenshot below: Click Routing Source Selection > **Note**\ > The log entry will specify if the lead was redirected using the **Direct Click** method. ### Breakdown of Key Fields * **Note**\ Indicates the routing method used (e.g., `Direct Click`). * **URL**\ Displays the **referrer URL** that triggered the redirection. * **Response**\ Contains the final URL that the lead was redirected to. * **Advertiser**\ Identifies the click endpoint assigned to the lead—this is crucial when using **distribution-based routing**. Click Routing Source Selection # Campaign Distribution Source: https://docs.pingtree.com/documentation/campaign/distribution/custom-endpoints Create, configure, and manage custom endpoints for lead distribution including field mapping, routing, and response handling. #### Custom Endpoints The term "endpoint" at its highest level, is a URL generated by an external server which can be used to facilitate data transfer, updates, or execute similar actions from web browsers and other applications referred to as "clients". In Pingtree's case, the "custom endpoint" casts a wide net when it comes to use-case, functionality and capabilities. Below are a few common examples for how custom endpoints are used in Pingtree. 1. **Lead Buyers**: Sending lead data to buyers will generally be facilitated through a custom endpoint (Advertiser would be the alternative which would provide the buyer with their own advertiser portal) 2. **CRMs:** Sending lead data to your own CRM or the CRM of a third party is a common use-case. 3. **Databases/Data Lakes**: Another potential use-case would be any sort of data warehouse or visualization tool where lead data may be stored. 4. **Dialers:** Similar to CRMs, dialers can also be a common practice for Pingtree users to facilitate lead data transfers. Custom Endpoints are at the heart of the lead distribution segment of your campaign, so needless to say it's important. Now that we've touched on common examples of how custom endpoints can be used in practice, below you will find some of the different features and capabilities custom endpoints have and what will be covered in the following articles. **Lead Routing/Click Routing** * Field Mapping * Transformer Tool * API Request Formats & Languages * Posting Formats * Endpoint CAPs, Filters & Plugins * Dynamic Response Mapping * Testing Endpoint Feature * Minimum Pricing **Click Listings** * Click Listing Build * Click Listing Filters & Routing There are a number of ways to configure an endpoint properly. Your campaign framework, your buyers, and the type of traffic you're running can all play roles in determining the actual set up. This article will detail the steps for setting up an endpoint successfully. Some of these steps may or may not be required and some steps may require additional set up for full accuracy. Some of the factors to consider prior to making your endpoint include: 1. What function do these endpoints serve? Are they direct buyers, your CRM, a dialing system, a database etc.. 2. Which routing methodology will this campaign be based on? Form or Click Routing, Ping+Post Routing, Pingtree Routing. 3. Which filters and rules are you going to want to assign for your endpoint? 4. Have you received the API specs for the server in which you will be sending the data to? ##### ##### Endpoint Configuration and Distribution Setup **Step 1**\ Endpoint Creation: Create the endpoint by selecting "Add Custom Endpoint" in your Distribution --> Custom Endpoint view. Apply a name and a parent endpoint which can be one and the same. **Step 2**\ Lead Routing: Inside of your lead routing section is where you will manage the bulk of your build. Add your endpoint URL, a backup URL (if applicable), \*\*minimum price (if applicable) and map your parameters. This includes headers and/or static fields. *\*\*Minimum Price feature applies if the endpoint's server is including a price value in their API response AND you want to only sell the lead to the endpoint if that price that's returned is greater than or equal to the value you set.* **Step 3**\ Determine your HTTP method (Pingtree supports both GET and POST). This should be in the API specs for the server you're sending this data to. **Step 4**\ Determine your POST format. If sending your data via a POST method, you will need to confirm the format. By default, Pingtree is formatted to send POST as JSON. (Pingtree also supports sending POST requests as x-www-form-urlencoded, form-data, XML-16 and XML-8). This information should be in the API specs for the server you're sending this data to. **Step 5**\ Add Response Mapping: When you send a lead to an endpoint in this way, you are calling an API. This API transmits your data from Pingtree's server to the endpoint's server. That initial delivery of data is called the API request. As a result the server that's ingesting this data will send back an API response. Response Mapping allows you to create logic surrounding this API response and the data the endpoint's server just received. With this API response, you can configure rules or dynamically capture data for reporting purposes as well as other features. Each of these response mapping fields allow you to capture this data in either JSON or XML which is determined by the endpoint's server and how they send their responses. **API Response Mapping**: In this field, you will be mapping the endpoints response so that you can determine if a lead was actually accepted by the endpoint's server. You are mapping this from their API response so this would typically be included in their API specs. *\*Below is a common mapping you may see.* alt **Amount Mapping:** In this field, you will be mapping the price that the lead was purchased for. This would be indicated in the endpoint's API response. Once mapped properly, it will attribute the value as revenue for that lead assuming the lead was successfully sold. *\*Not all endpoint setups will need this function* **URL Mapping:** In some situations, the API response from a server may include a URL that is expected to have the lead redirected to. In order to capture that URL value, you will need to map the field to the value stored in the API response. There are other steps involved in fully completing this redirect action, as this is simply mapping the value and storing it. **Reject Reason Mapping:** In this field, you will be mapping the reasoning (if available) for a lead being rejected. By default, if a lead was attempted to sell to an endpoint, meaning it validated through all CAP, time, and state filters, as well as custom routing rules, and still did not sell to a buyer, Pingtree will store this reject reason as "Lead Rejected due to response mapping". IF you map this portion of the endpoint's server response, you may be able to capture a higher level of data as to why the lead was rejected i.e. duplicate, api error, invalid data etc… Now that the reject reason is mapped and stored, you'll be able to see this in your logs under "Reject Logs". This added feature allows you to monitor these reject reasons and have more insight into your lead performance. **Assigning a Waiting Time:** The Waiting Time field indicates how long Pingtree's system will wait for the endpoint's server to respond before timing them out. Typically API calls between servers are relatively instantaneous however there are, in some cases, reasons why the API call may take longer.\ **Sample Response Feature:** Pingtree gives you the ability to preview the API response of an endpoint's server without needing to look at their docs. Simply add an existing Pingtree transaction\_id into this field, and click "Get Sample Response" to call their API and generate a response. Depending on their server or API setup, they may not provide all or any data in the response but utilizing this feature can be helpful. **Step 6**\ The third tab inside your Lead Setup and Routing section is "Filters". In this section, you will determine the GENERAL rule logic for this endpoint. **Black List Alliance**: You can enable this feature by toggling it on, and it will prevent any leads that were either rejected or unprocessed by Black List Alliance from being delivered to this endpoint. *\*\*In order to successfully use this feature, you will need to add in your Black List Alliance account code and token in your campaign settings*\ **Geolocation Filters:** Determine which states or zip codes should be excluded from being sent to this endpoint.\ **CAP**: You may set CAP limits for this endpoint. Choose to set your CAP method as a global CAP, monthly CAP, weekly CAP or daily CAP. Additionally for daily CAPs you may also assign a daily payout CAP.\ **Time Filters:** Also called day-parting, this filter will allow you to enter the days of the week as well as the time periods where you can attempt to sell leads to an endpoint. Simply add the start and end times in the appropriate days and activate the "Enable Time Settings" toggle. **Step 7**\ Price Settings: You can assign a fixed price which will be attributed to an endpoint anytime a lead is sold to them. You can bifurcate this by source type: (Media Channel, Marketing Partner or Custom Source).\ If you choose to configure with this option, be sure to enable the "Override Campaign Settings" toggle **Step 8**\ Testing: Once these steps have been completed, you have the option to test the server to server connection and ensure your field parameters are mapped to the endpoint's parameters correctly. Select the "Test Endpoint" button which will prompt a dialog box which includes any fields you have mapped and static fields added. Begin adding the actual values these fields would contain (Not the fields themselves) as you are simulating an actual lead posting to this endpoint. Once finished, click "Submit" and this should generate an API response from the endpoint's server. This is a great tool in ensuring your server to server connection is functioning as expected. alt **Step 9**\ Enable and activate your endpoint. Do this by toggling on the "Enable Endpoint" toggle and in the upper lefthand corner of your lead mapping view, select the drop down to "activate" if it's not selected already. **Step 10**\ **Routing Rules:** Pingtree gives you the ability to create custom routing rules for your endpoints in order to bifurcate the lead data and distribute them to different places. Each rule is based on rule conditions structured as IF/THEN statements. They use lead and attribution data captured in the lead's payload. If any rules are applied, you will create them here, and in the "Action" field, you will select the endpoint that you wish to attribute this rule to. Only endpoints that are enabled and do not have a separate rule attributed to it will be available from the picklist. You can apply more than one routing rule condition per endpoint but only one rule can be attached to an endpoint at a given time. **Step 11**\ **Routing Logic:** Applying the routing logic puts your lead distribution into motion. Without adding your endpoint into the lead distribution section, you will not be able to get any data from your source, whether that be a Pingtree Offer or somewhere else, to your endpoint.\ In form routing there are 3 basic models: **Base Routing:** An endpoint can be added to this routing model if there **IS** **NO** custom routing rule logic applied. (This excludes general rule logic such as filters, CAP, response mapping etc..)\ **Conditional Routing**: An endpoint can be added to this routing model if there **IS** any custom routing rule logic applied which was described in Step 10.\ **Failover Routing:** An endpoint can be added to this routing model if there is **NO** custom routing rule logic applied, AND you want to attempt to deliver leads to this endpoint only in the event that it was unable to be sold to another endpoint in either Base Routing or Conditional Routing. **Step 12**\ **Applying Routing Thresholds:** Routing Thresholds give users the ability to apply weights and threshold parameters with the primary goal of evenly distributing leads to different endpoints who may have different CAP limits throughout the day.\ ——————————————————— #### #### #### ##### **Field Mapping** Fields, also commonly referred to as "parameters" or "keys", are what's used to define the structure in which certain values are ingested into a system/application. These fields represent an overlying data attribute such as **First Name**, **Last Name**, **Email Address** and **Phone Number**. Each of these attributes would contain a corresponding value. Field mapping in this context of sending lead data via API involves the process of mapping data fields from the Pingtree system to another to ensure that the information is properly understood and processed by the receiving system. Once the fields are identified, you will define a mapping between the fields in your lead routing section and the corresponding fields in the target system. This mapping specifies which data from the source system (Pingtree) should be sent to which fields in the target system (Custom Endpoint) and in what structure. **Example:**\ You are ingesting the following sets of data in your campaign offer that you wish to send to a buyer (i.e. custom endpoint). First Name, Last Name, Email Address, Phone Number, IP Address, Utm Source\ You know that your field attributes for these pieces of data are structured as so: first\_name=Michael\ last\_name=Jordan\ email=[michaeljordan23@gmail.com](mailto:michaeljordan23@gmail.com)\ mobile=800-855-8555\ utm\_source=tiktok\ You have received the API specs from your buyer which included their own field structure for each of these data points. They are as follows:\ `firstName={{Value}}` `lastName={{Value}}` `emailAddress={{Value}}` `phone={{Value}}` `sub\_1={{Value}}` If you take "Michael" which is clearly the first name value in this set of lead data. You will need to transfer that same value, into the recipient's first name. While you aren't touching the value itself in this example, you will provide the rules on how and where to deliver that value by mapping "first\_name" with "firstName". With this information, you now know how you will map these fields from Pingtree's system to your buyer's system. ##### **System Fields vs Custom Fields** **Pingtree System Fields**\ Pingtree has two types of parameters that can be used. System Fields and Custom Fields. System fields are those that are innate to the Pingtree platform. Some of these system fields are general and some are vertical specific. While it's not required that some of these system fields be used for your offers, it's **highly recommended** as there are a number of these fields which are molded to fit other certain components of the platform. **Pingtree's General System Field Parameters** Pingtree has a number of system fields that are native to your offers and the application. These fields, by default, are available in your campaigns | Field Label | Pingtree Parameter | | ---------------------------------------------- | ---------------------- | | **Pingtree Unique Lead ID Parameters** | | | Transaction ID | **transaction\_id** | | **Lead Data Parameters** | | | First Name | **first\_name** | | Last Name | **last\_name** | | Email | **email** | | Phone | **mobile** | | State | **state** | | Zip Code | **zip\_code** | | Country | **country** | | Address | **address** | | Date of Birth\* | **date\_of\_birth** | | SSN | **ssn** | | **3rd Party API Parameters** | | | Debt Amount | **debt\_amount** | | Trusted Form Ping URL | **trustedFormPingURL** | | Trusted Form Cert URL | **trustedFormCertURL** | | Trusted Form Token | **trustedFormToken** | | Jornaya | **jornaya** | | **Attribution Tracking Parameters** | | | External Click ID | **external\_clickid** | | Sub 1 | **sub1** | | Sub 2 | **sub2** | | Sub 3 | **sub3** | | Sub 4 | **sub4** | | Sub 5 | **sub5** | | ADV 1 | **adv1** | | ADV 2 | **adv2** | | ADV 3 | **adv3** | | ADV 4 | **adv4** | | ADV 5 | **adv5** | | Campaign ID | **campaign\_id** | | Source ID | **source\_id** | | UTM Campaign | **utm\_campaign** | | UTM Source | **utm\_source** | | UTM Creative | **utm\_creative** | | UTM Medium | **utm\_medium** | | UTM Term | **utm\_term** | | UTM Content | **utm\_content** | | UTM Placement | **utm\_placement** | | Google Click ID | **gclid** | | TikTok Click ID | **ttclid** | | Facebook Click ID | **fbclid** | | **Financials & Performance Metric Parameters** | | | Revenue | **amount** | | Payout | **payout** | | Cost | **cost** | | Ad Spend | **adSpend** | | **Event Parameters** | | | Event ID | **event\_id** | | **Creative Library Parameters** | | | Marketing Ad ID\* | **maid** | | Marketing Campaign ID | **mcid** | | Ad Manager ID | **amid** | | Marketing Ad Group ID | **mgid** | | Marketing Channel ID | **mid** | | Creative Ad ID | **crid** | | **Additional Common Parameters** | | | Product | **product** | | Product Type | **product\_type** | | Referral Code | **referral\_code** | | Gender | **gender** | | Age | **age** | | User Selected Debt | **debt\_selected** | | | | | | | **\*date\_of\_birth parameter used for Credit API call.** There may be a parameter which you need to store and/or pass that isn't already in Pingtree's database of system fields. In this instance you would need to create a custom field. This is done by going into your Org Level "Database Source" selection on the left hand menu. Once in this view, navigate to the "Custom Field" header. alt Select the following button to open up the Custom Field modal:\\ alt Once in here you will need to assign certain attributes to the custom field: alt **Field Name:** This is the actual format of the parameter for when it's mapped in the backend systems. It's important to structure this correctly **(SYNTAX MATTERS)** Pingtree uses all lower case characters and underscores "\_" as the standard format for system fields as this is the only special character permitted. While following this structure is not required, it is highly recommended to maintain a standardized format and field naming convention. **Field Label:** Your field label is how you will see the field on the frontend in your data tables and reporting. While there's no backend logic dependent on the Field Label, it's recommended to use a naming convention that is clear and conspicuous. **Data Type:** There are 5 primary data types Pingtree allows 1. **String** - This is the most versatile data type and is a sequence of characters used to represent text. Strings can include letters, numbers, symbols, and spaces. 2. **Boolean** - This data type is binary meaning there can only be 2 potential values. This could be represented as `{"True" "False"}, {"1" "2"}, {"yes" "no"}` 3. **Integer** - This data type represents a whole (non-fractional) number. ex: `{"25"}` 4. **Number** - A number data type includes integer values as well as fractional numbers. ex: `{"25"} or {"25.353"}` 5. **Date** - This data type refers to any specific date formatted values. \*\**It is also acceptable to use a string data type if you are collecting a value that's also formatted as a date.* **Required:** Choosing to enable this toggle will require this field and value in this field to be passed in your source API. **Campaign Selection:** Lastly you will choose which campaign(s) you want to attribute your custom field to. In some cases, the custom field may be vertical or hyper specific in which case there may be some active campaigns which would never utilize this field. In this instance, it's best to leave it unassigned to that particular campaign. ##### Data Transformer ###### ***Data Transformer Overview*** Pingtree's data transformer refers to a mechanism or process used to manipulate or transform data between different formats, structures, or systems. Specifically, in field mapping for lead generation, a data transformer may be employed to ensure that data collected from lead forms or other sources is transformed and mapped accurately to the desired fields in a database, CRM system, or other destination. Ex: In certain verticals, buyers may only accept values that are formatted in a particular way, and are generally case-sensitive. For example, if you're running a home services campaign, and one of your form questions is "Do you own the home" and the two values being passed on the backend are "yes" and "no", by default, when you configure your lead mapping for that buyer in distribution, one of those two values\ are going to be what is passed in the field you've mapped from Pingtree to the buyer's system. If this buyer ONLY allows ingestion of the values "Own" or "Rent" for this particular field, and you have sent that buyer "yes" or "no", it will result in their API not properly collecting these values which can ultimately lead to the rejection of the lead, if the buyer requires this field. If you only had a single buyer, you could simply modify the value from your form itself. If you have multiple buyers, all of whom require values in a different format, that is where the issue would be. This is where Pingtree's data transformer comes into play. alt ###### ###### ###### ***Applying the Data Transformer*** The data transformer tool will be applied within a given endpoint, in the lead routing section.\\ alt When mapping fields you will see a + icon next to the field you're mapping. Selecting this icon will open up the transformer tool underneath the field. alt After determining the data type you intend to use in the transformer for this field, you will need to map each value. In the left column you will input the value in the exact same structure as how your offer passes it (If using Webflow 2.0 form builder, this is configured in the element). In the right column, you will place the buyer's corresponding value in the exact same structure as how they ingest it. In the image below, the Pingtree user is passing the values in the field home\_type in the following formats: single\_family, duplex, townhome, modular, mobile\_home. These values are then transformed into each corresponding value in the right side of the column. As a result, when the buyer's system receives these data values, they will only capture the values as they are structured in that right hand column, allowing their API to successfully visualize the data.\\ alt Once you have finished converting each of the values, you can click "Submit" at the bottom of your lead routing view, the transformed values will tuck back into the field and there is nothing more you need to do.\ If you ever need to change these values, simply click on the + icon, and all of the values you've transformed for this field will collapse like in the image above. ###### *Data Transformer > Date Formatting* While the overall concept is the same, in that some buyers may require their date-related values ingested in a specific format, there are some unique components to modifying a date field with the transformer tool in Pingtree. There are a few things to note first about the initial format of any date-related field. Inside of the form builder in any field you're collecting a date, you will need to apply one of Pingtree's pre-set date masking formats. **If this masking is not applied, it can impact the functionality of the transformer tool**. As you'll see in the image below, there are 3 different formats you're able to apply to your date field. **DD-MM-YYYY**\ **MM/DD/YYYY**\ **YYYY-MM-DD** alt Back inside of the lead routing you will navigate to the field where you are capturing this date value. In this example, we are using "date\_of\_birth" however this same logic can be applied with any relevant date field.\ Once you have mapped the Pingtree field to the buyer's field ("date\_of\_birth" mapped to "DOB") you will need to select the + icon which will open up the transformer tool. In the dropdown menu, instead of selecting String or Number as the option, you will need to select Date. Once selected, it will populate an additional dropdown menu directly underneath. As seen in the image below, these are the various transformer formats you're able to manipulate the values into. For the following formats: * ISO 8601 * Short Date * Unix Timestamp * Custom Format Once selected, the only thing left for you to do is to save your changes by clicking "Submit" in the bottom of your Lead Routing ##### alt IF you need to transform the date value into a different format such as YY/MM/DD or MM-DD-YY, you will need to select Custom Format. Doing this will populate an input box where you will add in the format you wish to transform the date value into. ##### alt ##### **IMPORTANT** The table below references the Format (What needs to be input into the "Enter Custom Value" box and the Value Result which shows the corresponding formats for what the third party's system will receive. | Transformed Value Result | Date Format in Enter Custom Value | | ----------------------------------- | --------------------------------- | | 2021 | YYYY | | 202108 | YYYYMM | | 2021-08 | YYYY-MM | | 8/5 | M/D | | 08/05 | MM/DD | | 20210805 | YYYYMMDD | | 2021-08-05 | YYYY-MM-DD | | 2021\_08\_05 | YYYY\_MM\_DD | | 2021.08.05 | YYYY.MM.DD | | 8/5/21 | M/D/YY | | 08/05/21 | MM/DD/YY | | 08/05/2021 | MM/DD/YYYY | | 05 Aug 21 | DD MMM YY | | 05 Aug 2021 | DD MMM YYYY | | 2021 | YYYY | | 202108 | YYYYMM | | 2021-08 | YYYY-MM | | 8/5 | M/D | | 08/05 | MM/DD | | 05 August 2021 | DD MMMM YYYY | | Aug 5, 21 | MMM D, YY | | Aug 5, 2021 | MMM D, YYYY | | Aug 05, 2021 | MMM DD, YYYY | | August 5, 2021 | MMMM D, YYYY | | August 05, 2021 | MMMM DD, YYYY | | 202108051315 | YYYYMMDDHHmm | | 20210805\_1315 | YYYYMMDD\_HHmm | | 2021.08.05.1315 | YYYY.MM.DD.HHmm | | 2021-08-05-1315 | YYYY-MM-DD-HHmm | | 2021-08-05\_1315 | YYYY-MM-DD\_HHmm | | 2021.08.05.13.15 | YYYY.MM.DD.HH.mm | | 2021-08-05-13-15 | YYYY-MM-DD-HH-mm | | 2021-08-05 13:15 | YYYY-MM-DD HH:mm | | 2021-08-05 1:15 PM | YYYY-MM-DD h:mm A | | 2021-08-05 01:15 PM | YYYY-MM-DD hh:mm A | | 2021-08-05 @ 1:15 PM | YYYY-MM-DD @ h:mm A | | 20210805131504 | YYYYMMDDHHmmss | | 2021.08.05.131504 | YYYY.MM.DD.HHmmss | | 2021-08-05-131504 | YYYY-MM-DD-HHmmss | | 2021-08-05\_131504 | YYYY-MM-DD\_HHmmss | | 2021-08-05\_1315.04 | YYYY-MM-DD\_HHmm.ss | | 2021.08.05.13.15.04 | YYYY.MM.DD.HH.mm.ss | | 2021-08-05-13-15-04 | YYYY-MM-DD-HH-mm-ss | | 2021-08-05 13:15:04 | YYYY-MM-DD HH:mm:ss | | 2021-08-05 13:15.04 | YYYY-MM-DD HH:mm.ss | | 2021-08-05 1:15:04 PM | YYYY-MM-DD h:mm:ss A | | 2021-08-05 01:15:04 PM | YYYY-MM-DD hh:mm:ss A | | 2021-08-05 @ 1:15:04 PM | YYYY-MM-DD @ h:mm:ss A | | We Aug 5 21 | dd MMM D YY | | Wed Aug 5 21 | ddd MMM D YY | | Wed Aug 5 2021 | ddd MMM D YYYY | | Wed Aug 05 2021 | ddd MMM DD YYYY | | Wednesday, Aug 5 2021 | dddd, MMM D YYYY | | Wednesday, August 5, 2021 | dddd, MMMM D, YYYY | | Wednesday, August 05, 2021 | dddd, MMMM DD, YYYY | | 1:15 PM | h:mm A | | 01:15 PM | hh:mm A | | @ 1:15 PM | @ h:mm A | | Wed Aug 5 21 1:15 PM | ddd MMM D YY h:mm A | | Wed Aug 5 2021 1:15 PM | ddd MMM D YYYY h:mm A | | Wed Aug 05 2021 1:15 PM | ddd MMM DD YYYY h:mm A | | Wednesday, Aug 5 2021 1:15 PM | dddd, MMM D YYYY h:mm A | | Wednesday, August 5, 2021 1:15 PM | dddd, MMMM D, YYYY h:mm A | | Wednesday, August 05, 2021 1:15 PM | dddd, MMMM DD, YYYY h:mm A | | Wed Aug 5 21 01:15 PM | ddd MMM D YY hh:mm A | | Wed Aug 5 2021 01:15 PM | ddd MMM D YYYY hh:mm A | | Wed Aug 05 2021 01:15 PM | ddd MMM DD YYYY hh:mm A | | Wednesday, Aug 5 2021 01:15 PM | dddd, MMM D YYYY hh:mm A | | Wednesday, August 5, 2021 01:15 PM | dddd, MMMM D, YYYY hh:mm A | | Wednesday, August 05, 2021 01:15 PM | dddd, MMMM DD, YYYY hh:mm A | | Wed Aug 5 21 @ 1:15 PM | ddd MMM D YY @ h:mm A | | Wed Aug 5 2021 @ 1:15 PM | ddd MMM D YYYY @ h:mm A | | Wed Aug 05 2021 @ 1:15 PM | ddd MMM DD YYYY @ h:mm A | | Wednesday, Aug 5 2021 @ 1:15 PM | dddd, MMM D YYYY @ h:mm A | ##### alt ###### *String Sanitizer* The String Sanitizer transformer tool allows users to modify the value which may contain certain characters on the initial ingestion of data. ##### alt ##### ##### Objects & Arrays **Single Object** This is the most common format of data ingestion you will find. This is a collection of key value pairs where the key is a unique string and has a single layer of depth and flat structure. This is mapped normally - parameter to parameter In the following example, you would map Pingtree's field to the field below like: alt alt **Nested Object** While a Single Object only contains one object, a Nested Object is one that contains another object as one of its properties - in a hierarchy structure this is mapped with the “parent object” which would be “address" and "contactInfo" in the example below separated by a period and then the child object(s) “street”, "city", "state", and "zipCode". In this case there is only one additional layer of child objects however it is very possible that there's additional layers of child objects. "userId" and "name" are both structured as their own objects so those parameters would be structured as you would with a single entity object. Notice the placement of the opening and closing curly brackets as well as indents to determine which properties are contained within the different objects. In Pingtree you would structure a nested object by separating it with a period like: alt **Array** You may also encounter an array. Arrays are a collection of elements ordered that can be accessed by the index - These can also be nested as well. The Index in the example below would be “vehicle”\ Pingtree has a standard mapping structure for data that needs to be posted into an array. The index is first, followed by a period, followed by the sequence of the object (0,1,2,3...), followed by a period and finally the parameter. In the following example, you would need to add the period in between the primary object and the nested objects, but since this is an array, you will also need to include a "0". It would look like the following. If there were another object separated by the curly brackets, but within the same flat bracket, you would map the integer as a 1. The integer values you insert would continue to increase by 1 for as many objects that you are trying to map.\\ alt alt alt # Data Transformer Source: https://docs.pingtree.com/documentation/campaign/distribution/data-transformer Define Pingtree’s field mapping data transformer and various use-cases. # Data Transformer ## What is a Data Transformer? Pingtree’s data transformer refers to a mechanism or process used to manipulate or transform data between different formats, structures, or systems. Specifically, in field mapping for lead generation, a data transformer ensures that data collected from lead forms or other sources is transformed and mapped accurately to the desired fields in a database, CRM system, or other destination. For example: In certain verticals, buyers may only accept values in a particular case-sensitive format. If your form question "Do you own the home?" returns “yes” or “no,” but the buyer only accepts “Own” or “Rent,” Pingtree’s data transformer can convert “yes” to “Own” and “no” to “Rent.” ## Applying the Data Transformer The data transformer is applied within a given endpoint in the **Lead Routing** section: 1. Click the **+** icon next to the field mapping. 2. A transformer UI appears below the field. 3. Your source field (e.g., `home_type`) appears on the left; the target field (e.g., `homeType`) is on the right. 4. Choose the **Data Type** (String, Number, Date). 5. Map each source value to its transformed target value in the table. 6. Click **Submit** to save the transformations. Transformer Closed Transformer opened ## Using the Data Transformer for Date Formatting Date fields require a preset mask in your form builder (Webflow 2.0): * **DD-MM-YYYY** * **MM/DD/YYYY** * **YYYY-MM-DD** In the transformer tool, select **Date** as the data type, then choose one of: * **ISO 8601** * **Short Date** * **Unix Timestamp** * **Custom Format**: Enter your own format string. ### Common Custom Formats | Transformed Value Result | Date Format in Enter Custom Value | | ----------------------------------- | --------------------------------- | | 2021 | YYYY | | 202108 | YYYYMM | | 2021-08 | YYYY-MM | | 8/5 | M/D | | 08/05 | MM/DD | | 20210805 | YYYYMMDD | | 2021-08-05 | YYYY-MM-DD | | 2021\_08\_05 | YYYY\_MM\_DD | | 2021.08.05 | YYYY.MM.DD | | 8/5/21 | M/D/YY | | 08/05/21 | MM/DD/YY | | 08/05/2021 | MM/DD/YYYY | | 05 Aug 21 | DD MMM YY | | 05 Aug 2021 | DD MMM YYYY | | 05 August 2021 | DD MMMM YYYY | | Aug 5, 21 | MMM D, YY | | Aug 5, 2021 | MMM D, YYYY | | Aug 05, 2021 | MMM DD, YYYY | | August 5, 2021 | MMMM D, YYYY | | August 05, 2021 | MMMM DD, YYYY | | 202108051315 | YYYYMMDDHHmm | | 20210805\_1315 | YYYYMMDD\_HHmm | | 2021.08.05.1315 | YYYY.MM.DD.HHmm | | 2021-08-05-1315 | YYYY-MM-DD-HHmm | | 2021-08-05\_1315 | YYYY-MM-DD\_HHmm | | 2021.08.05.13.15 | YYYY.MM.DD.HH.mm | | 2021-08-05-13-15 | YYYY-MM-DD-HH-mm | | 2021-08-05 13:15 | YYYY-MM-DD HH:mm | | 2021-08-05 1:15 PM | YYYY-MM-DD h:mm A | | 2021-08-05 01:15 PM | YYYY-MM-DD hh:mm A | | 2021-08-05 @ 1:15 PM | YYYY-MM-DD @ h:mm A | | 20210805131504 | YYYYMMDDHHmmss | | 2021.08.05.131504 | YYYY.MM.DD.HHmmss | | 2021-08-05-131504 | YYYY-MM-DD-HHmmss | | 2021-08-05\_131504 | YYYY-MM-DD\_HHmmss | | 2021-08-05\_1315.04 | YYYY-MM-DD\_HHmm.ss | | 2021.08.05.13.15.04 | YYYY.MM.DD.HH.mm.ss | | 2021-08-05-13-15-04 | YYYY-MM-DD-HH-mm-ss | | 2021-08-05 13:15:04 | YYYY-MM-DD HH:mm:ss | | 2021-08-05 13:15.04 | YYYY-MM-DD HH:mm.ss | | 2021-08-05 1:15:04 PM | YYYY-MM-DD h:mm:ss A | | 2021-08-05 01:15:04 PM | YYYY-MM-DD hh:mm:ss A | | 2021-08-05 @ 1:15:04 PM | YYYY-MM-DD @ h:mm:ss A | | We Aug 5 21 | dd MMM D YY | | Wed Aug 5 21 | ddd MMM D YY | | Wed Aug 5 2021 | ddd MMM D YYYY | | Wed Aug 05 2021 | ddd MMM DD YYYY | | Wednesday, Aug 5 2021 | dddd, MMM D YYYY | | Wednesday, August 5, 2021 | dddd, MMMM D, YYYY | | Wednesday, August 05, 2021 | dddd, MMMM DD, YYYY | | 1:15 PM | h:mm A | | 01:15 PM | hh:mm A | | @ 1:15 PM | @ h:mm A | | Wed Aug 5 21 1:15 PM | ddd MMM D YY h:mm A | | Wed Aug 5 2021 1:15 PM | ddd MMM D YYYY h:mm A | | Wed Aug 05 2021 1:15 PM | ddd MMM DD YYYY h:mm A | | Wednesday, Aug 5 2021 1:15 PM | dddd, MMM D YYYY h:mm A | | Wednesday, August 5, 2021 1:15 PM | dddd, MMMM D, YYYY h:mm A | | Wednesday, August 05, 2021 1:15 PM | dddd, MMMM DD, YYYY h:mm A | | Wed Aug 5 21 01:15 PM | ddd MMM D YY hh:mm A | | Wed Aug 5 2021 01:15 PM | ddd MMM D YYYY hh:mm A | | Wed Aug 05 2021 01:15 PM | ddd MMM DD YYYY hh:mm A | | Wednesday, Aug 5 2021 01:15 PM | dddd, MMM D YYYY hh:mm A | | Wednesday, August 5, 2021 01:15 PM | dddd, MMMM D, YYYY hh:mm A | | Wednesday, August 05, 2021 01:15 PM | dddd, MMMM DD, YYYY hh:mm A | | Wed Aug 5 21 @ 1:15 PM | ddd MMM D YY @ h:mm A | | Wed Aug 5 2021 @ 1:15 PM | ddd MMM D YYYY @ h:mm A | | Wed Aug 05 2021 @ 1:15 PM | ddd MMM DD YYYY @ h:mm A | | Wednesday, Aug 5 2021 @ 1:15 PM | dddd, MMM D YYYY @ h:mm A | ## New Data Transformer Options ### String Sanitizer The String Sanitizer transformer tool allows users to manipulate the stored value to keep characters and numbers, and to remove special characters. String Sanitizer opened ### Prefix or Postfix The Prefix or Postfix tool allows users to prepend or append strings to transformed values.\ **Example:** !\[REPLACE HERE: Prefix/Postfix UI] # Endpoint & Distribution Configuration Source: https://docs.pingtree.com/documentation/campaign/distribution/endpoint-configuration Step-by-step guide to create and configure custom endpoints and set up distribution logic in Pingtree. # Endpoint & Distribution Configuration Follow these steps to build and activate a custom endpoint, then wire up distribution logic (routing rules, filters, CAPs, thresholds). > **Video Walkthrough:** A step-by-step video guide for this feature is coming soon. Endpoint configuration wizard with field mapping *** ## Pre-Setup Considerations Before you begin, gather: * **Endpoint function**: direct buyer, CRM, dialer, data warehouse, etc. * **Routing method**: Form, Click, Ping+Post, or Pingtree Routing. * **API specs**: endpoint URLs, methods, payload formats, authentication, and response structure. * **Filter & rule criteria**: geolocation, CAPs, time windows, custom routing logic. *** 1. Go to **Distribution → Custom Endpoint**.
2. Click **Add Custom Endpoint**.
3. Enter a **Name**, select a **Parent Endpoint**, and save.
1. In the **Lead Routing** tab, enter your **Primary URL** and **Backup URL** (optional).
2. Map system fields and any **Static Fields** (headers, tokens, etc.).
3. (Optional) Set a **Minimum Price** to only accept leads if the response price ≥ your threshold.
1. Choose **GET** or **POST** (per API specs).
2. Select **Payload Format**:
* JSON (default)
* x-www-form-urlencoded
* form-data
* XML (16-bit or 8-bit)
1. In **Response Mapping**, map:
* **Success flag** (accept/reject)
* **Amount** (revenue)
* **URL** (redirects)
* **Reject Reason** (for logs)
2. Assign **Endpoint Timeout** (seconds to wait per request).
3. Use **Sample Response** to test with a real `transaction_id`.
1. Go to the **Filters** tab.
2. Enable **Black List Alliance** (if used).
3. Configure **Geolocation**, **State/Zip** filters.
4. Set **CAPs** (global, daily, weekly, monthly).
5. Define **Day-Parting** time windows.
1. In **Price Settings**, assign a **Fixed Payout** per sale.
2. Toggle **Override Campaign Settings** for source-specific pricing.
3. Click **Test Endpoint**, enter sample values, and verify the live API response.
1. Toggle **Enable Endpoint** on.
2. In the top-left, select **Activate**.
3. Ensure the endpoint status shows **Active**.
1. **Routing Rules**: Create IF/THEN conditions under **Distribution → Routing Logic**.
2. **Routing Models**:
* Base Routing: default delivery
* Conditional Routing: custom rules
* Failover Routing: catch-all
3. **Routing Thresholds**: apply weights for rotational distribution.
4. Save and **Publish** your campaign changes.
*** You’re all set! Your endpoint is now live with full distribution logic. Monitor logs and adjust filters, CAPs, or routing rules as needed. # Form Routing Source: https://docs.pingtree.com/documentation/campaign/distribution/form-routing Route leads via API or funnel builder based on form submissions, with conditional, base, failover, thresholds, and authentication settings. # Form Routing ## The Basics **Form Routing** sends lead data to endpoints via API calls or built-in funnel forms. You configure routing rules, filters, CAPs, rotational thresholds, and authentication within each endpoint’s **Form Settings**. *** ## Routing Models Pingtree offers three routing models for form distribution: * **Base Routing**\ Add an endpoint here if **no** custom routing rules apply (excluding filters, CAPs, response mapping). Leads flow to all base endpoints in priority order. * **Conditional Routing**\ Use this when **custom IF/THEN rules** are defined. Only leads matching those conditions route here. * **Failover Routing**\ Configure endpoints here to catch leads **not sold** by Base or Conditional routing. Only applies if earlier models do not accept the lead. *** ## Example Scenarios ### Scenario A: Geolocation-Based Routing Route **Lead A** (California) to a specific endpoint and **Lead B** (others) to a fallback: 1. **Endpoint A** * In **Form Settings**, set **Send Method** to REST API. * Add a **Geolocation Filter** for California (auto-detected or user-defined). 2. **Failover Endpoint** * Configure a generic endpoint under **Failover Routing**. 3. **Routing Setup** * Add **Endpoint A** under **Conditional Routing**. * Add the failover endpoint under **Failover Routing**. *** ### Scenario B: Rotational Thresholds Distribute leads by percentage across multiple endpoints: 1. Set a **Rotational Count** (e.g., 100 leads). 2. Create a **Routing Bucket** and add active endpoints. 3. Assign each endpoint a **percentage** of the count (e.g., 50%, 30%, 20%). 4. Pingtree rotates leads based on these weights, ensuring CAP limits are met. *** ### Scenario C: Multi-Tier Routing Combine conditional, base, and failover logic: 1. **Conditional Routing** – applies specific IF/THEN rules. 2. **Base Routing** – default delivery for leads that pass filters/CAP. 3. **Failover Routing** – catches all remaining leads. Pingtree processes in order: **Conditional → Base → Failover**. *** ### Scenario D: Short-Lived Authentication Token Some endpoints require a temporary token for each POST: 1. In **Form Settings**, open the **Auth** tab. 2. Configure the **Auth Request** to retrieve a short-lived token. 3. Map the token in **Response Mapping**. 4. In the **POST** mapping, include the token variable for authentication. *** ## How Form Routing is Triggered Form Routing is activated when: * You call the **Form API** directly. * A lead completes a **campaign funnel** built with our funnel builder. * A lead is ingested into a campaign via **Sources > Form API**. *** !\[REPLACE HERE: Form Routing Flow Diagram] # Ping+Post Routing Source: https://docs.pingtree.com/documentation/campaign/distribution/ping-post A real-time lead auction system that pings multiple buyers, collects bids, and posts the lead to the highest bidder. Designed for dynamic lead distribution in verticals like insurance, finance, and education. **Ping+Post Routing** is a real-time bidding system used to distribute leads across multiple buyers. It enables campaigns to ping eligible buyers, collect bids, and post the lead data to the highest (or best-matching) bidder for final acceptance—maximizing revenue and optimizing routing logic. *** ### How It Works domains 1. **Lead Submission**\ A visitor submits a form. Pingtree receives the full lead payload. 2. **Ping to Buyers**\ Pingtree sends a **Ping** request (HTTP GET or POST) to all eligible buyer endpoints simultaneously. This request includes partial lead data (e.g., zip code, age, product interest) based on mapping. 3. **Buyers Evaluate & Respond**\ Each buyer evaluates the lead and returns a Ping response with: * Accept/Reject status * Bid amount (price they're willing to pay) * A unique Ping ID token (required for Post) Only responses marked as “Accepted” are retained for routing. 4. **Select Highest Bidder**\ Pingtree sorts all accepted responses by bid value. The buyer with the highest bid is selected. 5. **Post to Winning Buyer**\ Pingtree sends a **Post** request (with full lead data and Ping ID) to the winning buyer. If accepted, the lead is sold. If rejected, Pingtree retries posting with the next highest bidder. 6. **Fallback Handling**\ If all posts fail, the lead is marked as unsold. *** ### Buyer Posting Specs When integrating with a Ping+Post buyer, their API documentation should clarify: * **Ping Endpoint URL** & required fields * **Post Endpoint URL** & full data field set * Authentication headers or static tokens * Distinction between Ping and Post requests * Expected Ping ID/token requirements *** ### Configuration & Setup Follow these steps to configure a Ping+Post integration: In the advertiser or custom endpoint’s Lead Routing section, enable **Ping+Post Routing** and switch to the **PING** tab. • Input the Ping URL and method (GET or POST)\ • Map the necessary partial lead fields\ • Enable "Bypass Ping" if this buyer should only be used for direct Post scenarios domains • Set Ping Timeout (max wait time per buyer)\ • Map **Ping ID**, **Accept/Reject flag**, and **Bid Amount**\ • Optionally map **Reject Reason** and other logging fields\ • Use "Store Fields From Buyer Response" to auto-populate lead fields based on buyer data domains domains • Switch to the **POST** tab\ • Enter the Post endpoint and map full lead fields\ • Use `{{ping_id}}` or other stored response values in static fields as required by the buyer\ • Map response logic to confirm lead acceptance or rejection domains domains • Use “Test Endpoint” to send sample Ping/Post requests\ • Use “Get Sample Response” with a valid `transaction_id` to test mapping\ • Confirm bid handling, Ping ID tracking, and endpoint response structure domains *** ### Routing Logic Setup domains Configure your Ping+Post logic under **Distribution > Routing Logic > Ping+Post Tab**: * **Enable Ping+Post Routing**: Activates Ping+Post logic, overriding default routing. * **Async Toggle**: Sends Ping requests to all buyers at once, waits for responses, and picks the highest bidder (recommended). * **Sync Flow**: Sends Ping requests sequentially. Stops at first qualified bid that meets minimum price and proceeds to Post. * **Group Wait Time**: In Async, sets how long Pingtree waits for all buyers in a group to respond. * **Add Groups**: Organize buyers into tiers or categories. If all buyers in one group fail, Pingtree moves to the next group. * **Source Approval Flow**: If enabled, Pingtree returns the bid to the source via API. The source then triggers the Post using the Lead ID. *** ### Revenue Attribution Revenue is captured from the **Bid Amount** returned in the Ping response. Even if a buyer also returns a value in the Post, Pingtree prioritizes the Ping value for billing and reporting. *** ### Example: Ping+Post Lifecycle Summary 1. A form submission generates a lead. 2. Pingtree sends Pings to five buyers. 3. Three buyers respond: * Buyer A: Accept - \$45, Ping ID: abc123 * Buyer B: Reject * Buyer C: Accept - \$42, Ping ID: xyz789 4. Buyer A wins (highest bid). 5. Pingtree posts the full lead + `abc123` Ping ID to Buyer A. 6. Buyer A accepts → lead is sold, revenue = \$45. *** ### Best Practices * Validate mappings using the "Get Sample Response" tester. * Always verify Ping ID logic with the buyer’s dev team. * Use Async routing to increase chances of highest bid. * Store buyer responses when possible for debugging or redirection needs. * Separate Ping and Post logic clearly in documentation and configs. *** # Pingtree Routing Source: https://docs.pingtree.com/documentation/campaign/distribution/pingtree-routing Sequentially offer leads to buyers in priority order until sold, with fine-grained timeouts, grouping, and optional async execution. ## Pingtree Routing **Pingtree Routing** is a sequential routing method that posts each lead to your buyers in the exact priority order you’ve defined in the Distribution view. It ensures you exhaust higher-priority buyers before moving on, maximizing your chances of a sale at the optimal price. ### Enabling Pingtree Routing * **Mutually exclusive**: Only one routing logic can be active per campaign. You cannot run Form Distribution, Ping+Post, and Pingtree Routing simultaneously. * **Activation**: Toggle on **Pingtree Routing** in your campaign’s Routing settings. Any other routing logic will be automatically disabled. ### Groups * **Purpose**: Organize endpoints (buyers) into logical groups—often by tier, vertical, or minimum acceptable price. * **Behavior**: Pingtree will cycle through all endpoints in Group A (in your specified order) before advancing to Group B. ### Timeouts #### Endpoint Timeout On each endpoint’s settings page, you define an **individual timeout** (e.g., 3 seconds). If the buyer’s server fails to respond within this window, Pingtree marks that attempt unsold and tries the next endpoint in the group. #### Group Timeout Set a **global timeout** for an entire group (e.g., 30 seconds). Once the total time spent on all endpoints in this group reaches the group timeout, Pingtree skips any remaining endpoints in the group and moves to the next group. > **Note:** Endpoint timeouts are honored first; if none respond successfully within their individual windows, the group timeout determines when to advance. ### Async Mode While most useful in Ping+Post scenarios, **Async** can be enabled here too: 1. Pingtree posts lead data to *all* endpoints in parallel. 2. It sells to the *first* endpoint that returns a successful response **and** meets its minimum price (if configured). 3. Without a minimum price, the first successful response wins. ### Minimum Price (Optional) * **Location**: Set per-endpoint in its settings. * **Function**: Defines the lowest price the buyer’s API must return for the lead to be considered sold. * **Behavior**: If the returned price is below this threshold, Pingtree skips that buyer—even if they respond successfully—and continues routing. *** # Posting API Source: https://docs.pingtree.com/documentation/campaign/distribution/posting-api Configure post-submission API calls to buyers or sources after form completion or specific events. # Posting API ## What is the Posting API? The Posting API sends lead data from Pingtree to external endpoints (buyers or sources) automatically after a form submission or a specific event and can be filtered to only trigger based off of custom conditions. ## How is Posting API Used in a Pingtree Campaign? By default, Posting API is enabled for all buyers and sources via a global toggle. When enabled, Pingtree will send an API request once the configured trigger is met: * **Form Submission**: after a lead completes a selected form. * **Event**: when a specific event type occurs (selectable in the configuration). If you disable the global toggle, you can scope the Posting API to individual buyers or sources. ## Configuration Requirements 1. **Endpoint URL**\ The URL where Pingtree will send the API request. 2. **Data & Field Mapping**\ Map only the lead attributes captured by Pingtree to the target endpoint’s expected parameters. Static values can be included if required. 3. **Request Method** * **POST** (default) * **GET** (optional) 4. **Payload Format** * **JSON** (default) * **XML** * **x-www-form-urlencoded** * **form-data** ## Trigger Types ### Form Data Posting Fires immediately after a lead form is successfully submitted. ### Event Data Posting Fires when a configured lead event occurs (e.g., sale, form step completion). Select the event from the dropdown. ## Enabling & Scoping * **Global Toggle**\ Enables Posting API for *all* buyers and sources by default. * **Scoped Selection**\ After toggling off globally, select specific buyers or sources to receive or skip the API. * **Event Selector**\ If using Event Data Posting, choose which event triggers the request. ## Example Setup 1. Navigate to **Campaign > Distribution > Posting API**. 2. Toggle **Enable Posting API** on. 3. Enter **Endpoint URL**, choose **Request Method**, and select **Payload Format**. 4. Map your lead fields and any static values. 5. Under **Trigger**, choose **Form Submission** or a specific **Event**. 6. (Optional) Toggle off global scope and choose individual buyers/sources. 7. Save and test using a sample `transaction_id`. !\[REPLACE HERE: Posting API Flow Diagram] # Routing Distribution Logic Source: https://docs.pingtree.com/documentation/campaign/distribution/routing-overview Overview of routing distribution methods in Pingtree and how to access them. # Routing Distribution Logic ## The Basics In lead distribution, the goal is to match incoming leads with the most appropriate destination—whether that's a **form**, **offer wall**, or **buyer endpoint**. **Routing Distribution** defines the method and logic used to make that decision. Pingtree offers several configurable routing methods that adapt to your campaign needs, buyer contracts, and lead filtering rules. Distribution overview with traffic volume, conversions, and cap fulfillment Distribution Overview ## Real-World Use Case You’ve got traffic hitting a high-performing campaign. Some leads should: * Go straight to a branded form. * Be redirected to an offer wall if they’re in specific states. * Hit a ping/post auction to maximize yield. * Be rerouted to a fallback if caps are hit or filters fail. This flexibility is what Pingtree's **Routing Distribution Logic** delivers. ## Types of Routing Distribution Pingtree supports five core routing distribution methods, three of which share a unified configuration structure: ### Click Routing / Form Routing / Call Routing\* These are direct distribution methods that forward the lead based on filters and logic you define. Click Routing Source Selection > *Note: Call Routing coming soon* ### Pingtree Routing Posts lead data to multiple buyers in a ranked, priority-based order until one accepts the lead. Pingtree Routing Distribution Overview ### Ping+Post Routing Executes a real-time bidding process where the lead is first **pinged** to buyers for eligibility and pricing. Once responses are received, the system **posts** the lead to the highest bidder that meets your filters. This can be done: * **Sequentially**: Posting to buyers one by one based on priority until a successful post. * **Simultaneously**: Posting to all eligible buyers at once and assigning the lead to the highest bid. Use Ping+Post when your priority is revenue optimization through buyer competition. Distribution Overview ## Where to Find Routing Distribution Types To view or configure these methods: 1. Go to your campaign. 2. Navigate to the **Distribution** section. 3. Select the **Routing Logic** tab. All available routing distribution types will be visible here, with full control over conditions, filtering, and failover logic. # Routing Rules Source: https://docs.pingtree.com/documentation/campaign/distribution/routing-rules Create custom IF/THEN logic to control exactly which endpoints receive each lead, based on lead metadata. # Routing Rules Routing Rules let you precisely control which endpoints (buyers) receive each lead. By defining IF/THEN logic around lead metadata, you decide **when** and **why** a lead should (or should not) be sent to a given endpoint. ## Rule Components ### Name A human-readable label for your rule. It doesn’t affect logic—it’s how you’ll identify it. ### Groups Groups combine multiple sets of conditions. Use the top-level `AND/OR` to specify whether **all** groups must match (`AND`) or **any** group match suffices (`OR`). ### Conditions (IF/THEN) Within each group, define one or more IF/THEN statements: ```text theme={null} IF [Field Parameter] [Operator] {Value} THEN [Action] ``` ## Building a Condition * **Field Parameter** The lead attribute you’re testing (e.g., `partner_id`, `state`, or any custom field). Only captured fields appear in this dropdown. * **Operator** Specifies the comparison method: * `=` (Equal) * `!=` (Not Equal) * `>` , `<` , `>=` , `<=` (Numeric comparisons; value must be an integer) * `IN` , `NOT IN` (List membership) * **Value** The exact string or number stored in Pingtree. **Case-sensitive**; must exactly match the stored data. ## Logical Combinations * **Within a Group** Choose if **all** conditions must be true (`AND`) or if **any** one suffices (`OR`). * **Across Groups** The top-level `AND/OR` determines if **every** group must match (`AND`) or if **any** single group match suffices (`OR`). ## Assigning Endpoints 1. Select one or more **enabled** endpoints. 2. Only endpoints without existing routing rules will appear. 3. If an endpoint is missing, ensure it’s enabled and not already assigned to another routing logic. ## Example ```text theme={null} RULE NAME: High-Value California Leads GROUP A (AND): IF utm_source = "google" IF state = "CA" THEN SEND TO: • Endpoint "California Premium Buyer" ``` !\[REPLACE HERE: Routing Rules Diagram] # Campaign Integrations Source: https://docs.pingtree.com/documentation/campaign/integraions Configure and manage third-party integrations within a campaign, including custom endpoints, click listings, and routing rules. ## Overview The **Campaign Integrations** section lets you connect Pingtree to external services — whether that's a CRM, a click network, a data enrichment provider, or any custom API endpoint. Integrations are configured at the campaign level so each campaign can have its own set of connected services. Campaign integrations showing available connections and filter options *** ## Integration Custom Endpoints An **integration custom endpoint** is a configured connection to an external API. Once set up, Pingtree can send data to or receive data from that external service as part of your lead flow. Common use cases include: * Sending lead data to a CRM or dialer system * Calling a data enrichment API to append information to a lead * Posting conversion events to third-party tracking platforms * Connecting to compliance or suppression list services ### Creating an Integration Endpoint 1. Navigate to **Integrations** within your campaign. 2. Click **Add Integration Endpoint**. 3. Enter a name for the integration. 4. Select the **category** that best describes the integration (e.g., CRM, Enrichment, Compliance). 5. Enter the endpoint URL provided by the third-party service. 6. Configure the HTTP method (GET or POST) and request format (JSON, form-encoded, XML). 7. Save the endpoint. *** ## Request and Response Mapping After creating an endpoint, configure how data is sent and received: ### Request Mapping Map Pingtree lead fields to the field names expected by the external service. For example: | Pingtree Field | External Service Field | | -------------- | ---------------------- | | `first_name` | `firstName` | | `email` | `emailAddress` | | `mobile` | `phoneNumber` | | `zip_code` | `postalCode` | Add any required headers (e.g., API keys or authorization tokens) in the **Headers** section. ### Response Mapping Configure what Pingtree does with the response it receives back from the external service: | Mapping Type | Description | | ------------------- | -------------------------------------------------------------------- | | **Success Mapping** | Define what a successful response looks like (e.g., `status = "ok"`) | | **Data Capture** | Store values from the response back into the lead record | | **Reject Reason** | Capture rejection messages for logging and reporting | *** ## Routing Rules and Filters for Integration Endpoints Control which leads are sent to each integration endpoint using routing rules and filters: * **Routing Rules** — Use IF/THEN logic based on lead field values (e.g., only send leads from California to this endpoint). * **Cap Settings** — Limit how many leads are sent to an integration per day, week, or month. * **Time Filters** — Restrict when the integration is active using day-parting settings. * **Geolocation Filters** — Include or exclude leads based on state or zip code. *** ## Testing Integration Endpoints Before going live, test each integration endpoint to confirm the connection is working correctly: 1. Open the integration endpoint you want to test. 2. Click **Test Endpoint**. 3. Fill in sample lead field values in the test dialog. 4. Click **Submit** to send a test request to the external service. 5. Review the API response to confirm data was received correctly. > **Tip:** Use a real transaction ID from a recent lead to generate a realistic test payload using the **Sample Response** feature. This helps verify that your field mapping is accurate without fabricating test data. *** ## Click Listing Integrations Pingtree also supports **click listing integrations** — connections to click networks that serve offers to users who submit a lead form. These are configured in the same Integrations section. ### Creating a Click Listing from an Integration Network 1. Navigate to **Integrations** → **Click Listings**. 2. Click **Add Click Listing**. 3. Select the integration network from the available list. 4. Enter your network credentials (API key, publisher ID, etc.). 5. Configure the placement — which funnel page and position the listing appears on. 6. Save and assign the click listing to your campaign. Click listing integrations pull live offers from the network and display them to users based on lead data collected in your funnel. *** ## Category-Based Organization All integrations can be tagged with a **category** to keep them organized: | Category | Examples | | ----------------- | ----------------------------------- | | **CRM** | Salesforce, HubSpot, custom CRM | | **Dialer** | Five9, RingCentral | | **Enrichment** | Data append, address validation | | **Compliance** | Blacklist Alliance, DNC suppression | | **Click Network** | Codebroker, Digital Media Solutions | | **Custom** | Any proprietary or custom API | Filtering by category in the integrations list makes it easy to find and manage specific types of connections. *** ## Integration Performance and Logs Each integration endpoint has a **performance summary** and **request logs**: * **Performance** — Total requests, success rate, rejection rate, and average response time. * **Logs** — Individual request and response pairs for debugging. Use the logs view to troubleshoot failed deliveries or confirm that data is being sent and received in the expected format. *** ## Assigning Integrations to Campaigns Integrations are scoped to individual campaigns. An integration endpoint created in Campaign A will not appear in Campaign B unless it is duplicated or separately created there. This design ensures that campaign-specific API credentials, routing rules, and field mappings stay isolated and do not accidentally cross-contaminate campaign data. # Manage Campaigns Source: https://docs.pingtree.com/documentation/campaign/manage-campaigns View, organize, and manage all your campaigns from a centralized list with filtering, search, and quick actions. ## Overview The **Manage Campaigns** page is your central hub for all campaigns in your Pingtree organization. From here you can search, filter, and take actions on any campaign without needing to open it individually. Campaign list view with search filters and action menu *** ## Campaign List Table Each row in the table represents a single campaign. The following columns are shown by default: | Column | Description | | ---------------- | ------------------------------------------------------- | | **Name** | The campaign's display name | | **Campaign ID** | Unique identifier in the format `cpXXX` (e.g., `cp100`) | | **Status** | Active or Inactive | | **Owner** | The user who owns the campaign | | **Category** | The category the campaign is grouped under (if set) | | **Created Date** | Date the campaign was created | *** ## Searching and Filtering Use the toolbar at the top of the list to narrow down campaigns: * **Search bar** — Search by campaign name or Campaign ID. * **Campaign Type filter** — Filter by lead generation type (e.g., form, click, ping-post). * **Status filter** — Show only Active or Inactive campaigns. * **Date Range filter** — Filter campaigns by their creation date. * **Category filter** — Show campaigns belonging to a specific category. > **Tip:** Combining filters is a fast way to find campaigns in large organizations. For example, filter by Status = Active and Category = "Insurance" to see all live insurance campaigns at once. *** ## Campaign Actions Each row in the table has an actions menu (accessible via the three-dot icon or inline buttons). Available actions include: | Action | Description | | ------------------------- | ------------------------------------------------------------------------ | | **Edit** | Open the campaign settings to update name, description, or configuration | | **Duplicate** | Create a copy of the campaign with all its settings pre-filled | | **View Reports** | Jump directly to the campaign's reports section | | **Manage Routing** | Navigate to the distribution and routing configuration | | **Activate / Deactivate** | Toggle the campaign's live status on or off | | **Transfer Ownership** | Assign the campaign to a different team member | | **Manage Team** | Add or remove users who have access to this campaign | *** ## Campaign Categories Categories help you organize campaigns by vertical, brand, or any grouping that makes sense for your team. * Categories can be created from the campaign list page or within campaign settings. * A campaign can belong to one category at a time. * Filter the list by category to quickly surface related campaigns. *** ## Transferring Campaign Ownership If a campaign manager leaves the team or responsibilities shift, you can transfer ownership to another user. 1. Open the actions menu for the campaign. 2. Select **Transfer Ownership**. 3. Choose the new owner from the user list. 4. Confirm the transfer. > **Note:** Only admins and the current campaign owner can initiate an ownership transfer. *** ## Adding Team Members to a Campaign Campaign access can be scoped to specific users, so only the right people see the right campaigns. 1. Open the actions menu for the campaign. 2. Select **Manage Team**. 3. Search for the user you want to add. 4. Select their role level and confirm. Role-based permissions apply — a user with View Only access will be able to see campaign data but not make any changes. *** ## Campaign Status | Status | Meaning | | ------------ | -------------------------------------------------- | | **Active** | The campaign is live and accepting traffic | | **Inactive** | The campaign is paused; no leads will be processed | Toggle status from the actions menu at any time. Changes take effect immediately. # Media Buying Source: https://docs.pingtree.com/documentation/campaign/media-buying Connect ad platforms, track ad spend, and monitor paid media performance alongside your lead revenue. ## Overview The **Media Buying** section lets you connect your paid advertising accounts directly to Pingtree. Once connected, you can view ad spend, impressions, and click data from Meta, Google Ads, and TikTok alongside your lead revenue — giving you a true picture of ROI for every dollar you spend. Media buying dashboard showing connected ad accounts *** ## How Media Buying Works in Pingtree When you connect an ad platform to a campaign: 1. Pingtree links your ad account via OAuth (a secure login flow — no passwords shared). 2. A **Media Channel (MC) source** is automatically created in your campaign for that platform. 3. Ad-level data (spend, impressions, clicks) is imported and matched to lead performance. 4. You can track cost, revenue, and profit at the ad account, campaign, ad set, and ad level. *** ## Connecting Ad Platforms Pingtree supports OAuth connections with the following platforms: | Platform | What You Can Track | | ----------------------------- | ---------------------------------------------------------- | | **Meta (Facebook/Instagram)** | Campaigns, ad sets, ads, spend, impressions, clicks, CTR | | **Google Ads** | Campaigns, ad groups, ads, spend, CPC, CTR | | **TikTok Ads** | Campaigns, ad groups, ads, spend, impressions, video views | **To connect an ad platform:** 1. Navigate to **Media Buying** within your campaign. 2. Click **Connect Platform** and select the ad network. 3. You will be redirected to the platform's login page (OAuth flow). 4. Authorize Pingtree to read your ad account data. 5. Select the ad accounts you want to import into this campaign. 6. Click **Confirm** — your ad accounts will appear in the connected accounts list. > **Tip:** You can connect multiple ad accounts per platform (e.g., two separate Meta ad accounts for different brands). Each account will be listed separately in the media buying dashboard. *** ## Viewing Connected Ad Accounts Once connected, all active ad accounts are listed with a summary of their performance: | Column | Description | | ---------------- | ------------------------------------------ | | **Account Name** | The name of the connected ad account | | **Platform** | Meta, Google, or TikTok | | **Impressions** | Total impressions delivered | | **Clicks** | Total ad clicks recorded by the platform | | **Spend** | Total ad spend for the selected date range | | **CPC** | Cost per click from the ad platform | | **CTR** | Click-through rate (Clicks ÷ Impressions) | Use the date range filter at the top to view data for any time period. *** ## Importing Campaign, Ad Set, and Ad Level Data Pingtree imports performance data at three levels of granularity: | Level | Example | | --------------------- | ------------------------------ | | **Account** | "My Meta Business Account" | | **Campaign** | "Auto Insurance — Q3 2025" | | **Ad Set / Ad Group** | "18–35 Males — California" | | **Ad** | Individual creative variations | Drill into any level to see spend and lead metrics side by side. This helps you pinpoint which specific ads are generating the best-quality leads at the lowest cost. *** ## Media Channel (MC) Sources When you connect an ad platform, Pingtree automatically creates a **Media Channel (MC)** source for it. This source is visible in your campaign's **Sources** section and is used for: * Attributing leads back to the correct ad platform and campaign * Applying cap settings and payout rules at the media channel level * Running enhanced conversion postbacks to the ad platform You can view and edit MC sources the same way you manage any other source in Pingtree. *** ## Tracking Ad Spend Alongside Lead Revenue One of the most powerful features of media buying integration is seeing ad spend and lead revenue in the same place: | Metric | Source | | ------------ | ----------------------------------------------------- | | **Ad Spend** | Pulled directly from the connected ad platform | | **Revenue** | Earned from lead distribution in Pingtree | | **Profit** | Revenue minus Ad Spend | | **True ROI** | Calculated using both platform costs and lead revenue | This eliminates the need to reconcile data across multiple dashboards. Everything lives in one view. *** ## Managing Multiple Ad Accounts If you manage multiple brands or clients, you can connect separate ad accounts per campaign: * Each campaign can have its own set of connected ad accounts. * Ad accounts from the same platform can be connected across multiple campaigns without conflict. * Disconnect an ad account at any time from the connected accounts list by clicking the remove icon. *** ## Important Notes * Pingtree reads ad data in read-only mode. It does not create, edit, or pause ads on your behalf. * Data sync frequency depends on the platform's API — typically refreshed every few hours. * Enhanced conversion postbacks (sending lead conversion data back to the ad platform) are configured separately under the source's **Postbacks** tab. # Buyers Report Source: https://docs.pingtree.com/documentation/campaign/reports/buyers-report View all leads sold or rejected by buyers in a campaign. Offers filtering, grouping, and customizable columns. The **Buyers Report** in **Pingtree (PT)** provides campaign owners with a detailed view of all leads that were **sold** or **rejected** by buyers. This report enables teams to track buyer behavior, measure conversion outcomes, and refine lead distribution strategies. *** ## Overview This report is accessible from the **Campaign View → Reports → Buyers** tab. It presents all buyer-related lead activity and supports: * Individual or grouped views * Date-based filtering * Dynamic column visibility * Buyer-specific reporting *** ## Key Features ### Sold & Rejected Lead Tracking * Easily see which leads were **successfully sold** or **rejected** by buyers. * If a lead is rejected, fields like **endpoint** and **rejection reason** are available. *** ### View Modes * **Individual View**: Lists each lead transaction line by line. * **Group View**: Aggregates data by buyer or endpoint for higher-level summaries. Toggle between these views using the **Group Tab**. *** ### Date & Buyer Filters * Use the **Date Picker** to narrow results to a specific time window. * Filter the report to focus on a **specific buyer** or a set of buyers. *** ### Column Customization * Decide which columns you want visible in your report. * Hide or show data fields like: * `endpoint` * `buyer_name` * `rejection_reason` * `status` * `lead_id`, etc. *** ## How It Works 1. **Navigate to:**\ `Campaign > Reports > Buyers` analytics 2. **Configure your filters:** * Choose a date range * Apply buyer filters * Select columns to show or hide analytics 3. **Switch views:** * Use **Group Tab** to view grouped summaries analytics 4. **Analyze outcomes:** * Understand which leads are converting and which are being rejected — and why. analytics *** > **Note:** This report is particularly useful for diagnosing delivery issues, managing buyer quality, and fine-tuning your lead distribution rules. # Conversions Report Source: https://docs.pingtree.com/documentation/campaign/reports/conversion-report Track and analyze lead conversion data with filters, column customization, and lead-level actions. The Conversions Report in Pingtree (PT) helps campaign owners monitor and analyze lead conversion performance across their campaigns. It provides flexible filters, customizable columns, and lead-level actions for deeper insight. **Key Features** * **Default Date Range**: Displays the last 7 days of data by default. * **Lead Type Filter**: Set to "All" by default. Filter to "Click Only" to view click-based conversions. * **Source Filter**: Filter by specific traffic sources to analyze performance by origin. **Table Columns** * **Show/Hide Columns**: Toggle visibility for any column. * **Rearrange Columns**: Drag and drop to reorder as needed. * **Filter Columns**: Apply filters directly to columns to refine data. analytics **Save Custom Views (Per Campaign)** You can customize your report layout per campaign—filters, column visibility, and order—and save that view. When returning to the report, your settings for that campaign will automatically load. **How It Works** 1. Go to the Conversions Report tab. analytics 2. Apply filters like date range, lead type, and source. 3. Customize the table layout with desired columns and order. 4. Save your view for reuse per campaign. **Available Actions for Each Lead** * **Transaction Flow**: View a step-by-step breakdown of the lead’s transaction lifecycle—from submission to conversion. * **Events**: Review all events tied to the lead, including validations, delivery steps, or third-party actions. * **View Details**: Open a comprehensive view of the lead, including metadata, logs, buyer interactions, and more. These tools help investigate lead paths, troubleshoot delivery issues, and evaluate campaign effectiveness. # Events Report Source: https://docs.pingtree.com/documentation/campaign/reports/events-report View and analyze event logs and aggregated event performance for leads sold across campaigns. The **Events Report** in **Pingtree (PT)** helps campaign owners **track, analyze, and optimize** all lead-related event activities within a campaign. It provides insights into event performance both at the individual and aggregate levels. *** ## Overview The Events Report offers two distinct views: analytics ### 1. **Event Log View** Provides a detailed, transaction-level breakdown of every recorded event. #### Key Data Points: * **Event Name** * **Transaction ID** * **Event Revenue** * **Event Payout** * **Lead ID** * **Timestamp** #### Filters Available: * **Source** – Filter by origin (e.g., Custom Source, Media Channel, or Marketing Partner) * **Advertiser** – Select one or more advertisers * **Events** – Filter specific event types (e.g., `event_form_completed`, `event_call_connected`) * **Lead Type** – Choose from `click`, `form`, or `all` * **Custom Filters** – Narrow your report using dynamic conditions * **Date Range** – Filter by specific timeframes *** ### 2. **Event Grouping View** This view **aggregates** events by key dimensions, making it easier to spot trends, compare channels, and assess campaign effectiveness. #### Common Grouping Dimensions: * **Source** * **Event Type** * **Media Type** * **Device Type** * **Advertiser** #### Filters Available: * **Source** * **Lead Type** * **Date Range** *** ## Use Cases * Identify **top-performing sources** for specific event types * Monitor **event revenue trends** over time * Compare **media performance** across different campaigns * Spot **issues** (e.g., high rejection or low engagement) early through event logs *** ## Switching Between Views Use the toggle within the Events Report interface to switch between: * **Event Log View** (detailed per-lead data) * **Event Grouping View** (aggregated summaries) *** > **Tip:** Customize your columns and filters for each view to tailor insights to your reporting needs. This report is crucial for understanding downstream lead activity after sale or submission. # Transaction Report Source: https://docs.pingtree.com/documentation/campaign/reports/transaction-report Monitor and analyze all lead transaction activity with filters, customizable views, and lead-level insights. The Transaction Report in Pingtree (PT) helps campaign owners track and analyze all lead transactions in their campaigns. With flexible filtering, column customization, and detailed lead-level insights, it supports effective performance monitoring and troubleshooting. **Key Features** * **Default Date Range**: Displays the last 7 days of transaction data by default. * **Lead Type Filter**: Set to "All" by default. Use "Click Only" to view only click-based transactions. * **Source Filter**: Filter transactions by specific sources to assess lead quality or traffic behavior. **Table Columns** * **Show/Hide Columns**: Customize your view by toggling columns on or off. * **Rearrange Columns**: Drag columns into your preferred order. * **Filter Columns**: Use inline filters to narrow down visible data. **Save Custom Views (Per Campaign)** Customize your layout and save it per campaign. Saved views include selected columns, filters, and order. Each time you open the report for a campaign, your saved configuration will load automatically. **How It Works** analytics 1. Navigate to the **Transaction** tab in the Pingtree dashboard. 2. Apply filters such as date, lead type, and source. 3. Show/hide and reorder columns as needed. 4. Save your layout for reuse. **Available Actions for Each Lead** * **Transaction Flow**: View a step-by-step breakdown of the lead’s journey from intake to conversion. * **Events**: See all associated events, including validations, delivery, and API interactions. * **View Details**: Access the complete lead record, including all metadata, logs, source data, and partner-level actions. These tools help you understand and evaluate how each lead was processed, enabling better decision-making and campaign optimization. # API Manager Source: https://docs.pingtree.com/documentation/campaign/settings/api-manager Define required fields and apply validation rules to incoming leads through the campaign's form API. ## Overview The **API Manager** tab allows you to enforce field validation for incoming leads submitted via the **Form API**. If any required field listed in this section is missing from the payload, the system will return a **validation error**. This ensures your traffic sources comply with the field structure required by your campaign. All Sources *** ## Key Features * **Required Fields Configuration**\ Mark specific fields as required to prevent incomplete lead submissions. * **Field Validations**\ You can apply field-level validations for: * **Email Verification** * **Mobile Number Verification** > Tip: This works similarly to **Sources > Field Management**, but applies at the campaign level for API submissions. # Campaign APIs Source: https://docs.pingtree.com/documentation/campaign/settings/campaign-apis Access API specifications for lead creation, update, fetch, and reporting functions at the campaign level. ## Overview The **Campaign APIs** tab provides access to a suite of API specifications that allow external systems to interact with Pingtree campaign data for lead handling, updates, and performance analysis. All Sources *** ## Available APIs * **[Create Form API](/api-explore/campaign/form-api)**\ Enables seamless lead form creation and submission. Ideal for capturing user data from landing pages or campaign websites, ensuring accurate and real-time lead intake. * **[Update Form API](/api-explore/campaign/update-api)**\ Allows modification of existing lead form data. Useful for correcting information, adding new data, or refining submissions post-entry. * **[Fetch Form Submission API](/api-explore/campaign/fetch-response)**\ Retrieves details of submitted lead forms. This ensures transparency and access to the exact data submitted for review or validation. * **[Campaign Lead List API](/api-explore/campaign/lead-list-api)**\ Provides a comprehensive list of all leads associated with a campaign. This supports follow-ups, analytics, and reporting. * **[Campaign Source Overview API](/api-explore/campaign/source-list-api)**\ Returns statistical and performance data from various lead sources within the campaign. Use this to evaluate effectiveness and optimize campaign sourcing strategies. > Tip: These APIs are especially helpful for integrating external CRMs, analytics tools, or lead systems with your Pingtree campaigns. # Click Script Source: https://docs.pingtree.com/documentation/campaign/settings/click-script Configure and customize your Pingtree Click Script for real-time tracking, attribution, and integration with ad networks and compliance tools. ## Overview The **Pingtree Click Script** is a vital snippet of code that enables real-time tracking and attribution for all lead traffic within a campaign. It ensures every click is properly attributed and recorded within Pingtree's system. All Sources *** ## Script Configuration Within the **Click Script** tab under Campaign Settings, users can modify and enhance the script with direct integrations such as: 1. **Lead User Web Recording** 2. **Jornaya** 3. **Trusted Form** 4. **Google Ads** 5. **TikTok Ads** 6. **Facebook (Meta) Ads** These integrations allow for advanced attribution, verification, and compliance across various advertising platforms. *** ## Additional Customization Options * **Sub Parameters**:\ Users can add custom query parameters for granular tracking. * **Custom Fields**:\ Additional fields can be appended to the script for advanced targeting or tracking needs. * **Cookie Storage Time**:\ Adjust how long the transaction ID persists in a user's session by changing the cookie expiration duration. > Tip: Proper setup of the Click Script ensures your leads are accurately tracked and integrated with your preferred marketing and compliance tools. # Click Script & SDK Source: https://docs.pingtree.com/documentation/campaign/settings/click-script-sdk Install and configure the Pingtree JavaScript tracking script to capture clicks, form submissions, and consent tokens on your landing pages. ## Overview The **Pingtree Click Script** is a JavaScript tracking script that powers client-side tracking on your landing pages. When installed, it automatically generates a unique **Transaction ID** for each visitor, tracks click and form events, captures lead data fields, and handles consent token collection — all in real time. The Click Script is the bridge between your landing page and the Pingtree platform. Every lead that flows through the system starts with a Transaction ID generated by this script. *** ## What the Click Script Does When a visitor lands on a page with the Click Script installed, the script: 1. **Generates a Transaction ID** — A unique UUID (v4) is created and stored in the visitor's browser cookie for the configured cookie duration. 2. **Fires a click event** — The script calls the Pingtree click API to register the visitor as a click lead, capturing browser, device, and geolocation data. 3. **Tracks page interactions** — As the visitor progresses through the form, the script tracks field completions and form submission events. 4. **Captures custom parameters** — Any query string parameters on the landing page URL (UTM params, sub IDs, etc.) are automatically captured and attached to the lead record. 5. **Handles consent tokens** — If Jornaya or TrustedForm integrations are enabled, the script retrieves and stores consent tokens alongside the lead. *** ## Script Installation Add the Pingtree script tag to the `` of your landing page HTML. The script is campaign-specific and is served dynamically based on the campaign ID (`cid`). ### Standard Tracking Script ```html theme={null} ``` Replace `{cid}` with your campaign's unique ID (visible in your campaign settings). ### Consent Script Variant For pages that display TCPA consent language managed through Pingtree, use the consent script instead: ```html theme={null} ``` This variant loads the consent language retrieval logic, enabling Pingtree to dynamically populate consent text on your page based on campaign-level consent settings. > **Tip:** Place the script tag as early as possible in the `` section to ensure the Transaction ID is generated before any form interactions occur. *** ## Script URL Reference | Script | URL Format | Purpose | | ------------------------ | ------------------------------------------------ | ---------------------------------------------------------------------------- | | **Main Tracking Script** | `/sdk/{cid}/pingtree.js` | Click tracking, Transaction ID generation, form event capture | | **Consent Script** | `/sdk/{cid}/pingtree-consent.js` | Consent language display and TCPA token retrieval | | **Consent Language API** | `/sdk/get-consent/{cid}/{transaction_id}/{fvid}` | Retrieves dynamically populated consent language for a specific lead session | *** ## What the Script Captures The script collects and transmits the following data at the time of the click event: ### Visitor & Device Data * Browser name and version * Operating system * User agent string * IP address * Geolocation data (city, state, ZIP code, country) — when geo lookup is enabled for the campaign ### URL Parameters All query string parameters present on the landing page URL are captured, including: * `pid` — Publisher / Source ID * `sub1` through `sub5` — Sub-source identifiers * `gclid`, `fbclid`, `ttclid` — Ad network click IDs * UTM parameters and any custom parameters configured on the source ### Consent Tokens When consent integrations are enabled on the campaign: * **Jornaya**: LeadID token captured from the Jornaya script * **TrustedForm**: Certificate URL captured from the TrustedForm script *** ## Cookie Storage The Transaction ID is stored in the visitor's browser cookie so it persists across page navigations within the same session. The cookie duration is configured at the campaign level: | Setting | Description | | ------------------- | ---------------------------------------------------------------------------------- | | **Cookie Duration** | How long the Transaction ID cookie is valid (e.g., `24h`, `7d`, or a custom value) | | **Default** | 24 hours if no custom duration is configured | If a visitor returns to the page with an existing Transaction ID cookie, the script reuses the existing ID and increments the click count rather than creating a duplicate lead. *** ## Script Behavior & Configuration The script's behavior is controlled entirely by the campaign settings configured in Pingtree. No manual code changes are required after installation. Configuration includes: * **Ad network integrations**: Google Ads, TikTok Ads, Facebook (Meta) — enabled in Campaign Settings > Click Script * **Consent integrations**: Jornaya, TrustedForm — enabled per campaign * **Sub-parameters**: Custom query parameters passed through and attached to the lead * **Custom fields**: Additional data fields captured from the page and appended to the lead record *** ## Event Tracking The script fires events back to Pingtree at key points in the visitor journey: | Event | When It Fires | | ------------------------- | ------------------------------------------------------------------ | | **Base Click Event** | Immediately on page load — registers the visitor as a click lead | | **Form Submission Event** | When the visitor submits the lead form | | **Custom Events** | At any point configured via the Event Manager in campaign settings | Each event is logged against the Transaction ID, building a complete audit trail of the visitor's journey from click to conversion. *** ## Billing Requirement The Click Script API (`/sdk/click`) enforces an active billing check before processing requests. If the organization's account has an unpaid balance or billing is not active, the script will not generate Transaction IDs and click events will be rejected. Ensure your organization's billing is up to date in **Settings > Payment Methods** to avoid interruptions to click tracking. *** ## Rate Limiting Click API requests are subject to the rate limits configured for your organization. If the rate limit is exceeded, requests are rejected with an HTTP `429 Too Many Requests` response. Contact your platform administrator to adjust rate limits if needed. # Compliance Source: https://docs.pingtree.com/documentation/campaign/settings/compliance Configure dynamic TCPA compliance structures and customize consent experiences for leads across multiple endpoints. ## Overview The **Compliance** tab enables dynamic TCPA (Telephone Consumer Protection Act) language configuration, ensuring legal alignment and flexibility in how consents are captured across multiple buyers and endpoints. You can set a **default/common TCPA language** and override it at the endpoint level with buyer-specific compliance messages. All Sources *** ## Consent Structures Pingtree supports five configurable TCPA models: 1. **Advertiser Modal**\ Uses common TCPA language with `{{buyer_list}}` placeholders. Clickable links open a modal displaying a list of buyers. 2. **Single Option**\ Replaces `{{}}` placeholders with the name of the buyer determined by routing logic. 3. **1-to-1 Consent**\ Shows the specific TCPA language of the routed buyer (not the default text). 4. **1-to-Many Dynamic Consent**\ Displays a selectable list of buyers, each with unique TCPA language. The lead can be sold to any selected buyer. 5. **1-to-Many Selected Consent**\ Similar to above but uses a shared TCPA language. Buyer names and images appear in the consent section. *** ## UI Sections ### 1. Compliance Consents * **Consent Structure:** Choose one of the five TCPA consent models. * **Consent Language:** Set a global default TCPA language. * **Consent Integration:** * *Integration Script:* Embed custom logic to load compliance dynamically. * *Integration Div:* HTML element that will render the TCPA content. ### 2. Manage or Add Consents Configure settings per advertiser or custom endpoint: * **Display Name:** Buyer name shown to users. * **TCPA Text:** Custom consent language. * **Short Description:** Brief buyer description. * **Image:** Logo of the buyer. ### 3. Consent Settings (For 1-to-Many Models) Additional configurations for **1-to-Many Dynamic Consent** and **Selected Consent**: * **Auto Selection:** Automatically selects specific buyers in the list. * **Sorting Order of Buyers:** * Highest Daily Cap * Highest Ping Amount * Highest Average Payout * Manual order (drag-and-drop) * **Consent Limitation:** * Set a maximum number of buyers users can select. * **Pop Alert:** * Enforce minimum required selections. * Customize title, description, and image of the alert. * Optionally enable "Allow Continue" toggle to permit continuation with fewer selections. > Tip: This flexible structure ensures compliance while optimizing user experience and buyer matching logic. # Event Manager Source: https://docs.pingtree.com/documentation/campaign/settings/event-manager Manage events within a campaign, configure conversion triggers, enable payouts, and access postback API specifications. ## Overview The **Event Manager** tab allows you to manage, assign, and configure events for your campaign. Events are crucial for tracking conversions, affiliate actions, and triggering postbacks or payouts based on specific lead interactions. All Sources *** ## Key Features * **Event List Selection**\ Choose the event list that this campaign will utilize for tracking and processing. * **Conversion Triggers**\ Enable events as: * **Conversion Event**: Marks the event that triggers conversion. * **Affiliate Conversion Event**: Used to signal conversion for affiliate platforms. * **Event-Based Payouts**\ Configure specific events to trigger payouts, enabling granular control over how and when revenue is shared. * **Multi-Trigger Support**\ Allow events to be accepted multiple times for the same lead if needed. Useful for multi-stage conversions. *** ## Postback API Specs Click on the "View Postback" button to access the **Postback API Specifications**. This documentation allows you to send events back to Pingtree using a lead's `transaction_id`. It’s essential for external systems triggering conversions or affiliate postbacks. > Tip: Using event-based payout and tracking provides greater control and precision in managing campaign outcomes and affiliate reporting. # General Settings Source: https://docs.pingtree.com/documentation/campaign/settings/general-settings Configure foundational campaign settings including domains, global scripts, redirect behavior, and integrations. ## Overview The **General Settings** tab under Campaign Settings provides critical setup configurations that apply across the entire campaign. These settings allow you to define domain behavior, script injections, redirection fallbacks, and integrations used for validation and tracking. All Sources *** ## 1. Campaign Settings This section enables several foundational options: * **External Domain**:\ Input the landing page or website domain that will be used for traffic redirection. This domain plays a key role when using tracking links (configured per source under the *Tracking Links* tab). There are two main link types: * **Direct Link**: Takes users straight to the funnel landing page. * **Redirect Link**: Redirects based on the *Link Route* setting. If set to *External Domain*, it will route to this defined external domain. * **Endpoint Redirect Backup URL**:\ Used when redirecting to buyer/advertiser URLs after a lead is sold. If a specific lead doesn’t receive a redirect URL from the buyer, this backup URL will be used as a fallback. * **Toggles**: * **Promotional Offer**: Enables highlighting promotional elements in the funnel. * **Make It Public**: Allows the campaign to be visible/public depending on system logic. * **Bypass Lead Sell Time**: Overrides any system-imposed delay between lead submit and distribution. *** ## 2. Domain Settings Configure the domain to be used for redirects. This domain typically handles redirects from tracking links and defines the base behavior for where leads land post-click. *** ## 3. Scripts Add global scripts to be injected across all funnel pages and traffic sources within the campaign. Useful for tracking pixels, JavaScript, or third-party analytics tools that need to load universally. *** ## 4. Integrations Set up campaign-level integrations used for validation or enhancement: * **[Jornaya Integration](/documentation/integrations/Jornaya-API)**:\ Input your **campaign key** and **account code** to enable Jornaya lead intelligence. * **[Blacklist Alliance](/documentation/integrations/Blacklist-DNC-API)**:\ Toggle to enable real-time checks against a global suppression and fraud detection list. * **[Debt API Pull](/documentation/integrations/Array-Credit-Pull)**:\ Toggle to enable real-time array debt pull validation during lead submission. * **[Google Address API](/documentation/integrations/Google-Places-API)**:\ Toggle to enable address autocomplete and validation using Google Maps API. > Tip: If an integration is enabled at the campaign level, you may still customize or override it at the source level when needed. # Payouts Source: https://docs.pingtree.com/documentation/campaign/settings/payout-management Configure global or source-level payouts using fixed or revenue share models across click, call, and form leads. ## Overview Payouts can be configured for an entire campaign or tailored individually for each **Media Channel (MC)**, **Marketing Partner (MP)**, or **Custom Source (CS)**. When configured under **Campaign Settings > Payouts**, these act as global payout rules unless overridden at the source level. All Sources *** ## Payout Models Payouts can be assigned in two ways across all lead types (Click, Call, Form): * **Fixed Cost**:\ Define a static payout amount. * **Revenue Share**:\ Allocate a percentage of the revenue as payout. *** ## Payout Scopes Users can apply payout rules: * **Globally by Source Type**: Apply settings across all MCs, MPs, or CSs. * **Per Individual Source**: Override global settings with unique logic for a specific partner or channel. *** ## Payout Conditions You can apply detailed conditions to control payout distribution: * **Payout Caps**: * Global Cap * Global Payout Cap * Monthly Cap * Monthly Payout Cap * Weekly Cap * Weekly Payout Cap * Daily Cap * Daily Payout Cap * Hourly Cap * Hourly Payout Cap * **Payout Hours**:\ Restrict payouts to specific timeframes (e.g., 9 AM to 5 PM, Mon–Fri). * **Geographic Filters**:\ Limit payouts based on **State** and **ZIP Code**. * **Custom Payout Filters**:\ Create logic based on specific lead data attributes. > Tip: These global payout settings act as defaults. You can customize or override them at the individual source level for more control. # Price Management Source: https://docs.pingtree.com/documentation/campaign/settings/price-management Define and control the revenue structure for leads using Set Price or Cost Plus models per source or source type. ## Overview The **Price Management** tab allows users to configure the revenue earned per lead within a campaign. This configuration can be applied globally across source types or customized per individual source. All Sources *** ## Pricing Structure Under **General Settings**, you can enable or disable pricing for the campaign and select the preferred pricing model: * **Set Price**:\ Assign a fixed revenue amount per lead. * **Cost Plus**:\ Apply a markup either as a **percentage** or **fixed amount** over the lead's cost to determine the revenue. > Tip: If pricing is disabled here, the campaign will not calculate or use any revenue structure regardless of source settings. *** ## Price Management by Source The revenue settings can be applied at multiple levels: * **Source Type Level**:\ Apply pricing rules globally to all **Marketing Partners (MP)**, **Media Channels (MC)**, or **Custom Sources (CS)**. * **Individual Source Level**:\ Customize revenue structure for each specific source independently. ### Cost Plus * Supports both: * **Percentage-based markup** * **Fixed amount markup** ### Set Price * Only supports a **fixed revenue amount** per lead. > Tip: Using source-level overrides allows you to fine-tune your campaign profitability per traffic partner or channel. # Subscription & Pricing Source: https://docs.pingtree.com/documentation/campaign/settings/subscription-management Configure platform-level pricing tiers, usage-based billing charges, free allowances, and API rate limits for organizations. ## Overview **Subscription & Pricing** is an admin-level feature that controls how organizations are billed for their use of the Pingtree platform. Admins can define base costs, configure usage-based charges per event type, set free tier allowances, and enforce API rate limits on a per-organization basis. > **Note:** This section is restricted to platform administrators. Organization users do not have access to these settings. *** ## Price Settings Price settings define the foundational billing structure applied to an organization's subscription. ### Base Cost Options | Field | Description | | ----------------------------- | ------------------------------------------------------------------- | | **Base Cost** | The flat monthly cost charged to the organization (up to \$100,000) | | **Managed Service Base Cost** | An additional flat fee for organizations on a managed service plan | ### Trial Options Control how the trial period is structured before the organization is charged: | Field | Description | | ----------------------- | -------------------------------------------------------------------------------------------------- | | **Cost Structure** | Choose the pricing model — `Manual` (default) or `Straight Cost` (immediate billing with no trial) | | **Trial Days** | Number of days the organization has access before billing begins (max 1,000 days) | | **Require Credit Card** | When enabled, a valid credit card must be on file before the trial begins | > When **Straight Cost** is selected as the cost structure, trial day and credit card settings are not applicable. *** ## Usage-Based Billing Usage-based billing allows the platform to charge organizations incrementally based on their actual activity. Each billable event type can be configured with a per-unit cost. ### Billable Event Types | Event Type | Description | | ---------------- | --------------------------------------------------------- | | **Leads** | Charged per lead submitted through the platform | | **Webhooks** | Charged per outbound webhook fired to a buyer or endpoint | | **Pings** | Charged per ping sent in a ping-post distribution flow | | **Lead Fetches** | Charged per lead retrieval via the lead fetch API | ### Free Tier Allowances Each event type can include a free tier — a number of events that are not billed within a billing cycle. Once the free tier is exhausted, the per-unit charge applies to all subsequent events. | Setting | Description | | --------------------- | --------------------------------------------------------- | | **Free Leads** | Number of leads included at no charge each billing period | | **Free Webhooks** | Number of webhook events included at no charge | | **Free Pings** | Number of ping events included at no charge | | **Free Lead Fetches** | Number of lead fetch events included at no charge | > Usage-based billing can be toggled on or off per organization. When disabled, only the flat base cost applies. This toggle is also accessible from **Settings > Account Settings**. *** ## Rate Limit Management Rate limits control how many API requests an organization can make within a given time window. Setting appropriate rate limits prevents abuse and ensures fair resource allocation across the platform. ### Configurable Rate Limits Rate limits are set per API endpoint category and can be adjusted independently for each organization: | Limit Type | Description | | ------------------------------ | --------------------------------------------------- | | **Click API Rate Limit** | Maximum click events accepted per time window | | **Form / Lead API Rate Limit** | Maximum lead submissions accepted per time window | | **Ping API Rate Limit** | Maximum ping requests accepted per time window | | **Webhook Rate Limit** | Maximum outbound webhook dispatches per time window | ### How Rate Limiting Works When an organization exceeds its configured rate limit for a given API, subsequent requests within the same window are rejected with an HTTP `429 Too Many Requests` response. Requests resume normally once the window resets. > Rate limit windows are rolling and are enforced at the organization level. Individual campaigns within an organization share the organization's rate limit allocation. *** ## Billing Tier Summary The table below summarizes how the different billing components interact: | Component | Applies When | | ------------------------- | ------------------------------------------------------------------------- | | Base Cost | Always — charged at the start of each billing cycle | | Managed Service Base Cost | Only for organizations on a managed service plan | | Free Tier | Deducted first before any per-unit usage charges apply | | Per-Unit Usage Charges | Applied after free tier is exhausted, when usage-based billing is enabled | | Rate Limits | Enforced continuously regardless of billing model | # Cap Settings Source: https://docs.pingtree.com/documentation/campaign/source-single-view/Cap-Settings-(CS,-MP) Control payout limitations on leads using global, time-based, or conditional caps. > **Note:** This tab is available in **Custom Source (CS)** and **Marketing Partner (MP)** source types. The **Cap Settings** tab allows you to configure payout-level caps specifically for a source, overriding the default cap settings defined at the campaign level. Unlike [Form API Validations](./Form-API-Validation-\(CS,-MC,-MP\)) — which block the **lead submission itself** — the Cap Settings here **only block the payouts** once a cap is reached. All Sources ## What Can Be Configured? ### Cap on Different Lead Types You can apply caps independently on: * **Clicks** * **Forms** * **Calls** Each lead type can have separate capping rules, giving you flexible control over traffic management. ### Cap Types You can set multiple types of caps for each lead type: * **Global Cap**: Total limit without time restriction * **Monthly Cap** * **Weekly Cap** * **Daily Cap** * **Hourly Cap** Additionally, two capping strategies are available: * **Unit Cap**: Limits based on the number of units (leads, clicks, etc.) * **Payout Cap**: Limits based on the total payout amount. ### Advanced Cap Controls You can further refine caps using: * **Day and Time Schedules**\ Restrict payouts to specific days of the week and time ranges. * **Location-Based Caps**\ Include or exclude specific **States** or **ZIP Codes**. * **Custom Filters Based on Lead Data**\ Define conditions using lead attributes to apply even more granular payout controls. This layered approach ensures you can manage and optimize traffic payout costs dynamically and precisely. *** * [Click here to view Custom Source Single View pages](./Custom-Source-Single-View) * [Click here to view Marketing Partner Single View pages](./Marketing-Partner-Single-View) * [Click here to view Media Channel Single View pages](./Media-Channel-Single-View) # Cost Update API Source: https://docs.pingtree.com/documentation/campaign/source-single-view/Cost-Update-API-(MC) Provides API specs for external systems to update the cost of a lead in Pingtree. > **Note:** This tab is available only in **Media Channel (MC)** source type. All Sources ## Cost Update API The **Cost Update API** allows external systems to update the **cost of a lead** by making a server-to-server request. This is useful when you want to modify lead costs dynamically after the lead has been generated and attributed to a source. ### How It Works * The API is fired by an **external source**. * It **requires** a valid `transaction_id` of the lead whose cost is to be updated. * It also requires the new `cost` value to be applied. ### Optional Parameter * **`cost_operation`** (optional): * If not provided, the cost will be **overwritten** with the new value. * You can pass: * `add` – to increase the existing cost. * `subtract` – to decrease the existing cost. ### Example Use Cases * Adjust cost post-sale based on dynamic criteria. * Apply performance-based discounts or bonuses to the cost. This endpoint gives flexibility to maintain accurate financial tracking even after initial lead submission. *** * [Click here to view Custom Source Single View pages](./Custom-Source-Single-View) * [Click here to view Marketing Partner Single View pages](./Marketing-Partner-Single-View) * [Click here to view Media Channel Single View pages](./Media-Channel-Single-View) # Creatives Source: https://docs.pingtree.com/documentation/campaign/source-single-view/Creatives-(MP) *** * [Click here to view Custom Source Single View pages](./Custom-Source-Single-View) * [Click here to view Marketing Partner Single View pages](./Marketing-Partner-Single-View) * [Click here to view Media Channel Single View pages](./Media-Channel-Single-View) # Database Source Suppression Source: https://docs.pingtree.com/documentation/campaign/source-single-view/Database-Source-Suppression-(CS,-MC,-MP) Prevent duplicate or DNC leads by matching field values against an internal lead database. > **Note:** This tab is available in **Custom Source (CS)**, **Marketing Partner (MP)**, and **Media Channel (MC)** source types. All Sources The **Database Source Suppression** tab allows you to block or reject incoming leads based on existing records in a connected **Database Source**. ### How It Works In Pingtree, a **[Database Source](/guides/database/database-source)** is separate from campaign-level sources. A campaign is linked to a DB source, where all collected lead data is stored. You can also upload leads directly into the DB source — independent of the campaign flow — and use that data for suppression or lookup purposes. This tab enables you to define suppression rules for an individual traffic source by matching incoming lead fields against the DB source. ### Suppression Field You can configure Pingtree to check a specific field (e.g., `mobile`, `email`, etc.). Every incoming lead will be evaluated against the selected field’s value in the chosen DB source. If a match is found, the lead will be **rejected**. ### Timeframe (In Days) You can choose to set a **Timeframe (in days)** to define how long a suppressed lead remains blocked: * If set to `90`, the same lead won't be accepted again within 90 days. After 90 days, the lead is allowed again, and the suppression resets. * If set to `0`, **timeframe-based suppression is disabled**, and matching leads will be blocked **indefinitely**. ### Common Use Cases * **Deduplication**: Prevent duplicate submissions by blocking leads that already exist. * **DNC (Do Not Contact) Compliance**: Suppress leads with phone numbers or emails flagged in your DNC database. This suppression method helps maintain data quality, compliance, and improves overall lead performance. *** * [Click here to view Custom Source Single View pages](./Custom-Source-Single-View) * [Click here to view Marketing Partner Single View pages](./Marketing-Partner-Single-View) * [Click here to view Media Channel Single View pages](./Media-Channel-Single-View) # Field Management Source: https://docs.pingtree.com/documentation/campaign/source-single-view/Field-Management-(CS,-MC,-MP) Override global field settings for an individual source, including value-based lead rejection. > **Note:** This tab is available in **Custom Source (CS)**, **Marketing Partner (MP)**, and **Media Channel (MC)** source types. The **Field Management** tab allows you to manage lead field configurations for an individual traffic source. While it mirrors the structure and logic of the **Global Field Management** section at the campaign level, any settings here will **only apply to this specific source**. ### Key Notes * **Enable/Disable Fields**\ Control which fields are displayed or hidden in the posting specs for sources. * **Values Rejection** can be enabled per field. * By default, all values for a field are accepted. * If this feature is enabled, you can define a list of acceptable values — similar to an **ENUM** constraint. * Example: For a field like `consent`, you may allow only `yes` or `no`. * Any incoming lead with a field value outside the defined list will be rejected. * **Set Required or Optional Fields**\ Mark fields as either required (mandatory for submission) or optional, depending on campaign needs. * **Apply Data Type Validations**\ Define validations on fields to ensure the correct data types (e.g., string, integer, date format) are submitted. * Unlike the global view, this tab **does not include** the following actions: * **Apply Changes to All Sources** * **Edit Field Descriptions** This is especially useful when you need to inspect or debug field handling for a single traffic source without affecting others. *** * [Click here to view Custom Source Single View pages](./Custom-Source-Single-View) * [Click here to view Marketing Partner Single View pages](./Marketing-Partner-Single-View) * [Click here to view Media Channel Single View pages](./Media-Channel-Single-View) # Form API Source: https://docs.pingtree.com/documentation/campaign/source-single-view/Form-API-(CS,-MC,-MP) Configure a server-to-server endpoint for sending lead data from a traffic source into Pingtree. > **Note:** This tab is available in **Custom Source (CS)**, **Media Channel (MC)**, and **Marketing Partner (MP)** source types. All Sources The **Form API** tab provides everything needed to configure and manage server-to-server lead delivery from a traffic source into Pingtree. ## What is the Form API? If you're working with a traffic source that sends leads directly to your web property, you'd typically use a **direct** or **redirect tracking link**. However, if the goal is to send lead data from an external system (like a landing page, CRM, or third-party form) directly into your Pingtree campaign, you'll use the **Form API**. This setup enables lead data to be transferred securely via **server-to-server communication**. ## Form API URL (Endpoint) The **API URL** serves as the endpoint where the traffic source submits lead data. This URL must be installed and used by the source sending the data to ensure it's received properly by Pingtree. ## Generate Authorization Token To allow a traffic source to post lead data, you need to generate an **Authorization Token**. Simply click the **"Generate New Token"** button next to the API URL. > **Important:** A new token is generated every time this button is clicked. If you've shared an existing token with a source and then generate a new one, they must update the token on their end with the new value. ## Authorization Token Details * This token is a **Bearer Token**. * The traffic source must send it in the **request header** using the following format: `Authorization: Bearer {your_token_here}` * Be sure to include the word `Bearer` followed by a space before the token value. ## API Request Types Pingtree supports two types of API requests: * **GET Request** * **POST Request** (Preferred: must use **raw JSON** format) If the source is using a **POST** request, they must ensure the data is formatted correctly as raw JSON in the body of the request. ## API Response Codes Pingtree provides various response codes to indicate whether the system accepted or rejected the lead data. These codes may reflect: * Successful receipt * Invalid or missing fields * Invalid token * Incorrect data format These responses help the traffic source debug issues and ensure smooth lead transmission. *** * [Click here to view Custom Source Single View pages](./Custom-Source-Single-View) * [Click here to view Marketing Partner Single View pages](./Marketing-Partner-Single-View) * [Click here to view Media Channel Single View pages](./Media-Channel-Single-View) # Form API Validation Source: https://docs.pingtree.com/documentation/campaign/source-single-view/Form-API-Validation-(CS,-MC,-MP) Apply CAP, time, location, and custom rules to control which API-submitted leads are accepted. > **Note:** This tab is available in **Custom Source (CS)**, **Media Channel (MC)**, and **Marketing Partner (MP)** source types. The **Form API Validations** tab allows you to set rules to automatically validate or reject incoming leads that are submitted through the Form API. This ensures that only qualified, properly-timed, and correctly-located leads are accepted from your traffic sources. All Sources ## Validation Options ### 1. CAP-Based Validation You can validate incoming leads based on CAP limits: * **Global CAP** * **Monthly CAP** * **Weekly CAP** * **Daily CAP** * **Global Payout CAP** * **Monthly Payout CAP** * **Weekly Payout CAP** * **Daily Payout CAP** This prevents traffic sources from sending more leads than allowed based on your configured thresholds. ### 2. Time-Based Validation Set time restrictions to control when leads can be accepted: * Specify **hours** and **days** during which leads are allowed. * Automatically reject leads sent outside of the allowed windows. ### 3. Location-Based Validation Validate leads based on geographic criteria: * **Include** specific **States**. * **Include** specific **ZIP Codes**. This ensures that only leads from desired locations are processed. ### 4. Custom Condition Validation Define custom rules based on **data attribution** fields from the lead data. Examples: * Accept leads only if certain fields match specific values. * Reject leads based on custom lead attributes. Custom conditions provide highly flexible control tailored to your specific requirements. *** * [Click here to view Custom Source Single View pages](./Custom-Source-Single-View) * [Click here to view Marketing Partner Single View pages](./Marketing-Partner-Single-View) * [Click here to view Media Channel Single View pages](./Media-Channel-Single-View) # General Settings Source: https://docs.pingtree.com/documentation/campaign/source-single-view/General-Settings-(MP) Control whether click and form data are visible to the marketing partner in their dashboard. > **Note:** This tab is available only in **Marketing Partner (MP)** source type. All Sources In the **Marketing Partner (MP) single view**, the **General Settings** tab allows you to control the visibility of lead data for your partners. ### Available Options * **Hide Click Data**\ When enabled, this will hide click data from the marketing partner’s dashboard. * **Hide Form Data**\ When enabled, this will hide form submission data from the marketing partner’s dashboard. These options provide a layer of access control and can help restrict sensitive data visibility while still maintaining partner engagement. *** * [Click here to view Custom Source Single View pages](./Custom-Source-Single-View) * [Click here to view Marketing Partner Single View pages](./Marketing-Partner-Single-View) * [Click here to view Media Channel Single View pages](./Media-Channel-Single-View) # Generate Specs Source: https://docs.pingtree.com/documentation/campaign/source-single-view/Generate-Specs-(CS,-MC,-MP) Quickly generate and share source-specific API specs and tracking links to streamline onboarding. > **Note:** This option is available in **Custom Source (CS)**, **Marketing Partner (MP)**, and **Media Channel (MC)** source types. All Sources To simplify and accelerate traffic source setup, Pingtree provides a **Generate Specs** feature within the source single view. You’ll find this button at the top of the left-hand menu in the source details panel. All Sources ## Generate Specs Modal When selected, a modal appears containing three key components: 1. **Email Input Box**\ Enter the traffic source’s email to send them the customized API specifications directly. 2. **API Specs URL**\ A sharable link to an external web page with the posting format, including required fields and structures, tailored to the source. 3. **Tracking Link Selector**\ A dropdown to select the correct tracking link associated with this source. This tool ensures traffic sources receive clear and accurate guidance on how to post leads into your Pingtree campaign correctly. *** * [Click here to view Custom Source Single View pages](./Custom-Source-Single-View) * [Click here to view Marketing Partner Single View pages](./Marketing-Partner-Single-View) * [Click here to view Media Channel Single View pages](./Media-Channel-Single-View) # Integrations Source: https://docs.pingtree.com/documentation/campaign/source-single-view/Integrations-(CS,-MC,-MP) Enable or disable built-in validation and fraud prevention tools on a per-source basis. > **Note:** This tab is available in **Custom Source (CS)**, **Marketing Partner (MP)**, and **Media Channel (MC)** source types. The **Integrations** tab allows users to apply validation and qualification tools to a specific traffic source. Pingtree supports several third-party integrations that help improve lead quality and minimize risk. These integrations can be applied globally at the campaign level or customized per traffic source from this tab. All Sources ### Available Integrations * Blacklist Alliance – Screen leads against known spam or fraud databases * Debt Pull API – Fetch unsecured debt amount for the lead * Phone & Email Validator – Validate contact details for accuracy and authenticity * Fraud Detection – Identify high-risk leads and suspicious activity patterns ### Configuration Notes * By default, **most integrations are automatically enabled** for new sources. * Make sure to **manually disable them** in this view, if you prefer not to use certain integrations. This allows greater control and flexibility over how leads are validated and filtered for each individual source. *** * [Click here to view Custom Source Single View pages](./Custom-Source-Single-View) * [Click here to view Marketing Partner Single View pages](./Marketing-Partner-Single-View) * [Click here to view Media Channel Single View pages](./Media-Channel-Single-View) # Source Overview Source: https://docs.pingtree.com/documentation/campaign/source-single-view/Overview-(CS,-MP) High-level performance analytics of a specific traffic source including revenue, payouts, and comparisons. > **Note:** This tab is only available in **Custom Source (CS)** and **Marketing Partner (MP)** source types. The **Overview** tab in the *Source Single View* provides a detailed reporting dashboard for a specific source. While many configuration settings can be managed at the campaign level (impacting all traffic sources), the Overview tab offers granular insight and control over an individual source’s performance. This tab is especially useful for monitoring and comparing key metrics, allowing you to fine-tune your lead traffic strategies. ## What's Included All Sources The page is divided into three key reporting sections: ### 1. Source Overview A summary of core performance metrics for the selected source, including: * **Revenue** * **Cost** * **Ad Spend** * **Payout** * **Margin** * **Profit** * Apply custom **Date Ranges** for analysis. Additionally, it displays: * **Payout Type** * **Cap Pace** Metrics are shown based on the traffic type: **Click**, **Call**, and **Form**. ### 2. Source Revenue This report shows a **line graph** of the source’s **Revenue** and **Payout**, with the ability to: * Filter by traffic type: **All**, **Click**, **Call**, or **Form** * Apply custom **Date Ranges** for analysis Each filter option updates the graph individually for precise insights. ### 3. Source Compare This section lets you: * Select and compare multiple other sources * View a **bar chart** (daily breakdown) * Toggle between metrics: **Volume**, **Revenue**, **Profit**, or **Payout** Use this tool to benchmark your source’s performance against others over time. * Apply custom **Date Ranges** for analysis All Sources *** * [Click here to view Custom Source Single View pages](./Custom-Source-Single-View) * [Click here to view Marketing Partner Single View pages](./Marketing-Partner-Single-View) * [Click here to view Media Channel Single View pages](./Media-Channel-Single-View) # Payout Settings Source: https://docs.pingtree.com/documentation/campaign/source-single-view/Payout-Settings-(CS,-MP) Customize conversion-related payout logic including static payouts, rev-share, and advanced modifiers. > **Note:** This tab is available in **Custom Source (CS)** and **Marketing Partner (MP)** source types. The **Payout Settings** tab provides full control over how payouts are handled for a specific source, allowing you to override campaign-level defaults and apply advanced dynamic payout structures. All Sources ## Payout Configuration Options ### First Card - Toggle Settings The top section contains four toggle switches that modify how conversions and payouts are processed: 1. **Allow for Duplicate Conversions** * When enabled, duplicate conversions will still be allowed and paid. 2. **On Conversion Events Fire Postbacks & Pixels** * When enabled, payout-related postbacks and pixels will fire immediately upon a conversion event. 3. **Enable Payout Conditions on Conversions** * Activates payout conditions based on rules set in the **Cap Settings** tab. 4. **Require Conversion Approvals** * When enabled, each conversion must be manually approved before the payout is processed. ### Second Card - Default vs. Source-Level Overrides The second section displays: * **Default Payout Settings** configured at the **campaign level**. * An option to **override** the campaign settings specifically for this source. By overriding, you can apply a completely different payout structure customized for this traffic source. ## Lead Type Payout Structures For each lead type — **Clicks**, **Calls**, and **Forms** — you can configure: * **Static Amount**\ Set a fixed payout amount. * **Revenue Share Percentage**\ Share a percentage of the revenue generated from the lead. ## Advanced Payout Modifier Clicking on **Payout Modifier** for any lead type opens a slider for **advanced payout configuration**. All Sources Within the modifier, you can define dynamic payout rules based on: * **Buyer** * **UTM parameters** ### Examples: * If **Buyer A** buys the lead, payout **\$4**; if **Buyer B** buys, apply a **10% revenue share**. * If the utm\_campaign is **camp1**, payout **$5**; if **camp2**, payout **$10**. * Create dynamic payout structures for any field/value combination in the lead data. This flexibility allows highly customized payout strategies to maximize your profitability and maintain tight control over acquisition costs. *** ## Additional Notes ### Allow for Duplicate Conversions When **Allow for Duplicate Conversions** is enabled, the system will **permit multiple conversions for the same lead** and trigger the **payout multiple times**—one for each conversion event. > Example: If a lead is sold to a buyer, and later that same lead is sold again via Click Listing or Offerwall, each of those conversions will **trigger a separate payout**. Each conversion must be **manually approved** (if the "Require Conversion Approvals" toggle is enabled) before the payout is actually processed. *** ### Advanced Payout Modifier – Configuration Notes All Sources In the **Advanced Payout Modifier** section, you can define multiple dynamic payout rules by selecting parameters and their values. 1. **Select the Parameter**\ Use the dropdown on the top right to select the parameter you want to filter by (e.g., `source_id`, `utm_term`, `buyer_id`, etc.). 2. **Enter Values**\ Input one or more values and click **Add** to populate them in the **Field Value** list. 3. **Build Multi-Conditional Payout Logic**\ You can define **multiple parameters and values**, and the payout rules for each will be evaluated together. #### Example Setup: * `source_id`: `comp1`, `comp2` * `utm_term`: `Tir1`, `Tir2` > These payout rules will **coexist** and apply simultaneously, allowing granular, dynamic payout strategies that adapt based on lead data. This setup gives you flexibility to structure payout behavior based on any combination of lead source or metadata. *** * [Click here to view Custom Source Single View pages](./Custom-Source-Single-View) * [Click here to view Marketing Partner Single View pages](./Marketing-Partner-Single-View) * [Click here to view Media Channel Single View pages](./Media-Channel-Single-View) # Payouts Source: https://docs.pingtree.com/documentation/campaign/source-single-view/Payouts-(CS,-MP) View detailed payout and revenue stats for a source, filtered by lead type and date range. # Payouts > **Note:** This tab is only available in **Custom Source (CS)** and **Marketing Partner (MP)** source types. The **Payouts** tab in the *Source Single View* provides a detailed financial summary for a specific source, helping you track revenue, payouts, and profitability over time. You can filter the data using a **date range selector** to analyze the performance within specific time periods. ## Summary Metrics The top section displays high-level financial figures: * **Lifetime Revenue** * **Current Pending Payout** * **Revenue** * **Payout** * **Total Margin** * **Margin** These metrics provide quick insight into how much revenue the source has generated, how much payout is pending, and the overall profitability. ## Payout Breakdown by Traffic Type The tab also breaks down payouts by traffic type: * **Click Payouts** * **Call Payouts** * **Form Payouts** This view allows you to evaluate how different types of lead activity contribute to the total payout amount. *** * [Click here to view Custom Source Single View pages](./Custom-Source-Single-View) * [Click here to view Marketing Partner Single View pages](./Marketing-Partner-Single-View) * [Click here to view Media Channel Single View pages](./Media-Channel-Single-View) # Ping + Post API Source: https://docs.pingtree.com/documentation/campaign/source-single-view/Ping-+-Post-API-(CS,-MC,-MP) Enable a two-step lead delivery method where sources verify buyers before submitting full lead data. > **Note:** This tab is available in **Custom Source (CS)**, **Media Channel (MC)**, and **Marketing Partner (MP)** source types. The **Ping + Post API** works similarly to the standard Form API but introduces a two-step process that offers greater control and efficiency over lead distribution. All Sources ## How Ping + Post API Works 1. **Ping Request** * The traffic source first sends a **Ping API** call with minimal lead information. * Upon receiving the ping, Pingtree initiates the distribution process and only fires **ping calls** to the buyers' or endpoints' ping APIs. * If any buyer expresses interest in purchasing the lead, Pingtree responds back to the source indicating **which buyer is ready to buy**. 2. **Post Request** * After being informed that a buyer is interested, the traffic source can then decide whether or not to send a **Post API** request containing the **full lead data**. * If the traffic source proceeds, the lead is fully posted and completed through the system. ## Key Differences Compared to Form API * In a **[Form API](./Form-API-\(CS,-MC,-MP\))** setup, the source directly posts the full lead data without prior verification of buyer interest or pricing. * **Ping + Post API** enables the source to **verify buyer availability and price** before deciding to send the complete lead information. This process ensures that only leads with confirmed buyer interest are fully submitted, optimizing efficiency for both sources and buyers. ## API URL and Authorization Token The **Ping + Post API** view in the UI is very similar to the standard [Form API](./Form-API-\(CS,-MC,-MP\)) tab: * Users can easily **copy the API URL** and **generate an Authorization Token**. * These credentials are then shared with the traffic source for integration with their tracking and posting setup. *** * [Click here to view Custom Source Single View pages](./Custom-Source-Single-View) * [Click here to view Marketing Partner Single View pages](./Marketing-Partner-Single-View) * [Click here to view Media Channel Single View pages](./Media-Channel-Single-View) # Postbacks Source: https://docs.pingtree.com/documentation/campaign/source-single-view/Postbacks-(CS,-MC,-MP) Send automated postbacks to a source's server upon lead events for tracking or optimization. > **Note:** This tab is available in **Custom Source (CS)**, **Marketing Partner (MP)**, and **Media Channel (MC)** source types. The **Postbacks** tab allows you to configure postback URLs for a specific source. Postbacks are a way to notify the source about user actions or campaign events, enabling deeper performance tracking and optimization. ## What is a Postback? A **postback** is a server-to-server communication triggered by user actions or lead events. It enables the exchange of information — such as lead status or conversion — between Pingtree and the traffic source’s own tracking system. ## How is a Source Postback Used in a Pingtree Campaign? When a traffic source sends you leads, they may want feedback on those leads for two main reasons: 1. To track **which leads generated revenue**. 2. To analyze **lead performance quality** for optimization. Although Pingtree offers a partner/affiliate portal, sources — especially **Marketing Partners** and **Custom Sources** — often prefer to receive data on their own platforms via postbacks. A source postback is triggered based on events configured in your campaign or manually fired as needed. ## What’s Required? To configure a source postback, the source must provide the following: 1. **Postback URL** * The endpoint on their server where Pingtree will send the data. 2. **Data and Field Mapping** * Only data captured with the lead can be dynamically sent. * You must map Pingtree’s fields to the source’s expected field structure. * You can also include static fields with predefined values. 3. **Request Method** * Pingtree supports both **GET** and **POST** requests. 4. **Payload Format** * Default: **POST** request in **JSON** format. * Optional formats: * `xml-8` & `xml-16` * `x-www-form-urlencoded` * `form-data` ## Postback Types You must choose what type of postback to configure: ### Form Data Postback * **Trigger:** Fired immediately upon **lead distribution completion**. * **Use Case:** General data feedback, real-time tracking. ### Event Data Postback * **Trigger:** Fired when a specific **Pingtree event** occurs (e.g., lead sold, converted, rejected). * **Use Case:** More controlled and conditional tracking (e.g., payout confirmation, conversion approval). ### Test endpoint * Use this button to test the connection and ensure the postback URL is properly set up. It will send a sample request and return the response, allowing you to confirm the endpoint is live and working. ## Posting Filters This is where you configure posting filters - rules that control when and which leads are allowed to be sent through the postback to the specified partner or endpoint. Filters include ZIP code, state, and volume/time restrictions. *** ### ZIP Code Filters All Sources #### Exclude ZIP Code * **Exclude Zipcode Toggle**:\ When enabled, Pingtree will prevent the postback from firing for any lead with a ZIP code matching the ones entered. * **ZIP Code Input Field**:\ Input one or more 5-digit ZIP codes. **Requirements**: * Must contain only numbers * Must be exactly 5 digits > Tip: Use this to block leads from specific ZIP codes based on partner targeting preferences. *** ### Geolocation Filter (Exclude State) All Sources This filter allows you to prevent postbacks based on **U.S. states**. * **Exclude State Toggle**:\ When turned on, Pingtree will prevent postback triggers for leads from selected states. * **Use Case**:\ Useful when a buyer or partner does not accept traffic from certain U.S. states for legal or performance reasons. > Tip: You can select multiple states simultaneously. *** ### Caps All Sources These caps **limit how many times the postback fires**, not how many leads are delivered. Each cap includes: * A toggle to enable * A numeric input to define the cap limit #### Cap Types | Cap Type | Description | | ----------- | ------------------------------------------------- | | Global Cap | Total number of allowed postback fires (lifetime) | | Monthly Cap | Maximum postbacks per calendar month | | Weekly Cap | Maximum postbacks per calendar week | | Daily Cap | Maximum postbacks per calendar day | | Hourly Cap | Maximum postbacks per hour | > Note: Once a cap is reached, leads will still be accepted or sold, but **postbacks will not fire** until the timeframe resets. *** ### Hours All Sources Restrict postback firing by **day of the week and time of day**. * **Enable Time Settings Toggle**:\ Activates the scheduling UI. * **Time Window Setup**:\ For each day of the week, define: * **Start Time** (Earliest firing time) * **End Time** (Latest firing time) > Example: If the partner only wants postbacks from 9 AM–6 PM, set those hours for Monday–Friday. > Tip: This does **not block leads** outside of these hours—only the postback. *** ### Conditions All Sources Apply field-based logic to control postback triggers based on lead values. #### Each Condition Includes: * **Field Selector**: Choose a field like `state`, `zip_code`, `payout`, `lead_status`, etc. * **Filter Operator**: * `=` (Equals) * `!=` (Not Equal) * `<` (Less Than) * `>` (Greater Than) * **Value Input**: Enter the value to compare. #### Advanced Options: * **+ Add Rule**: Add multiple rules to the same condition group (evaluated with AND logic). * **+ Add Condition**: Add new groups of conditions (each group is evaluated independently). #### Examples: * Fire postback **only if payout > 10** * Fire postback **only if lead\_status != rejected** By setting postbacks properly, you ensure your traffic sources receive accurate feedback, which can be used to improve lead quality, ROI, and campaign efficiency. *** * [Click here to view Custom Source Single View pages](./Custom-Source-Single-View) * [Click here to view Marketing Partner Single View pages](./Marketing-Partner-Single-View) * [Click here to view Media Channel Single View pages](./Media-Channel-Single-View) # Scripts Source: https://docs.pingtree.com/documentation/campaign/source-single-view/Scripts-(CS,-MC,-MP) Add external or custom scripts to your funnel for tracking, analytics, or front-end styling. > **Note:** This tab is available in **Custom Source (CS)**, **Marketing Partner (MP)**, and **Media Channel (MC)** source types. The **Scripts** tab allows users to inject external scripts for a specific traffic source. These scripts will automatically be attached to any website page where the campaign’s **click script** is present — whether the page is built using Pingtree’s funnel builder or is an external website. ### Use Cases This feature is useful for: * Adding **Google Tag Manager** (GTM) scripts * Integrating **Meta/Facebook Pixels** * Installing third-party **tracking or analytics tools** * **Modifying the design and look** of the landing pages using custom CSS or JavaScript * Any other **external script injection** needed for tracking, analytics, or presentation customization Once configured, these scripts will be executed client-side, ensuring proper tracking and visual control per source. All Sources *** * [Click here to view Custom Source Single View pages](./Custom-Source-Single-View) * [Click here to view Marketing Partner Single View pages](./Marketing-Partner-Single-View) * [Click here to view Media Channel Single View pages](./Media-Channel-Single-View) # Scrub Settings Source: https://docs.pingtree.com/documentation/campaign/source-single-view/Scrub-Settings-(CS,-MP) Set up payout scrubbing logic based on unit or revenue thresholds, with optional sub-ID conditions. > **Note:** This tab is available in **Custom Source (CS)** and **Marketing Partner (MP)** source types. The **Scrub Settings** tab allows you to configure scrub-based payout structures for clicks and forms. These are typically used to pay out traffic sources after a certain level of qualification or revenue has been met — instead of paying for each individual lead. All Sources ## Scrub Types You can configure scrub payouts for two lead types: * **Clicks** * **Forms** Each of these supports two scrub strategies: ### 1. **Unit-Based Scrub** Payout is triggered **after every X qualified leads**. Example: Set a scrub to fire a payout after every 5 qualified form submissions. ### 2. **Revenue-Based Scrub** Payout is triggered **once a set revenue threshold is reached**. Example: Set a scrub to fire a payout every time the lead revenue crosses \$100. ## Advanced Settings - Sub ID Customization All Sources In addition to global scrub rules, you can define **custom scrub logic based on sub IDs** (typically captured via tracking parameters like `utm_term`). This allows different scrub conditions per sub-source or traffic segment. ### Example Use Case: * For `utm_term=aca`, apply a specific unit-based scrub (e.g., $6 payout after $6.5 in revenue). * For `utm_term=med`, apply a revenue-based scrub (e.g., 1 payout every 3 leads). These sub-ID level controls provide powerful flexibility in managing scrub payouts per traffic type or partner. *** * [Click here to view Custom Source Single View pages](./Custom-Source-Single-View) * [Click here to view Marketing Partner Single View pages](./Marketing-Partner-Single-View) * [Click here to view Media Channel Single View pages](./Media-Channel-Single-View) # Brand Settings Source: https://docs.pingtree.com/documentation/campaign/source-single-view/Sources-Brand-Settings-(CS,-MC,-MP) Define source-specific variables to dynamically change values like phone numbers or labels on site. > **Note:** This tab is available in **Custom Source (CS)**, **Marketing Partner (MP)**, and **Media Channel (MC)** source types. All Sources The **Brand Settings** tab allows you to define and override dynamic variables that personalize the content shown to leads based on the traffic source. This setting is available in three places: * **Source Single View** * **Advertiser Single View** * **Funnel Builder Settings** All three use the same logic and priority structure. ### How It Works You can assign **key-value pairs** (variables) in this view. These variables can then be referenced dynamically in your websites, pages, or thank you flows. #### Example 1: Dynamic Phone Number (`DID`) * **Funnel Builder Default**: `DID = 111-111-1111` * **Source-Specific Setting**: `DID = 222-222-2222` If a lead uses the tracking link for the source with its own `DID` variable, they will see `222-222-2222`.\ If the source has no specific value, the site will fall back to the default: `111-111-1111`. #### Example 2: Dynamic Buyer Name Display * **Custom Endpoint A**: `buyer-name = buyer1` * **Custom Endpoint B**: `buyer-name = buyer2` * **Funnel Builder Default**: `buyer-name = (blank)` After a lead is sold, you can display the `buyer-name` dynamically on the thank-you page using the matching variable from the endpoint or source. ### Use Cases * Customize tracking phone numbers per source * Show buyer-specific messages * Dynamically adjust content or CTAs based on source-level settings *** * [Click here to view Custom Source Single View pages](./Custom-Source-Single-View) * [Click here to view Marketing Partner Single View pages](./Marketing-Partner-Single-View) * [Click here to view Media Channel Single View pages](./Media-Channel-Single-View) # Tags Source: https://docs.pingtree.com/documentation/campaign/source-single-view/Sources-Tags-(CS,-MC,-MP) Apply static key-value tags to all leads from a source for better attribution and segmentation. > **Note:** This tab is available in **Custom Source (CS)**, **Marketing Partner (MP)**, and **Media Channel (MC)** source types. All Sources The **Source Tags** tab allows users to automatically attach static key-value pairs to all leads coming from a specific traffic source. This is useful when you want to ensure that certain metadata or identifiers are consistently included with each lead submission — without relying on affiliates or publishers to send that data manually. ### How It Works Instead of asking your traffic partners to pass specific values (e.g. utm, adv, sub params), you can define them once using Source Tags. These tags are automatically included with any lead associated with the source. ### Example Use Cases * Add a static value like `sub1=website` or `utm_campaign=google-campaign-1` * Identify and track partner-specific performance without requiring custom link parameters * Simplify integration and attribution consistency across multiple traffic sources *** * [Click here to view Custom Source Single View pages](./Custom-Source-Single-View) * [Click here to view Marketing Partner Single View pages](./Marketing-Partner-Single-View) * [Click here to view Media Channel Single View pages](./Media-Channel-Single-View) # Tracking Links Source: https://docs.pingtree.com/documentation/campaign/source-single-view/Tracking-Links-(CS,-MC,-MP) *** * [Click here to view Custom Source Single View pages](./Custom-Source-Single-View) * [Click here to view Marketing Partner Single View pages](./Marketing-Partner-Single-View) * [Click here to view Media Channel Single View pages](./Media-Channel-Single-View) # Marketing Partner Dashboard View Source: https://docs.pingtree.com/documentation/campaign/source-single-view/View-Marketing-Partner-Dashboard-(MP) Preview exactly what a marketing partner sees in their Pingtree dashboard. > **Note:** This option is available only in **Marketing Partner (MP)** source type. All Sources The **View Marketing Partner Dashboard** button allows internal users to preview the dashboard exactly as the selected marketing partner would see it. This is helpful for: * Understanding the visibility and access your MP has to data and reports. * Verifying if any settings (such as hidden click or form data) are applied correctly. * Troubleshooting or testing the user experience from the partner’s perspective. *** * [Click here to view Custom Source Single View pages](./Custom-Source-Single-View) * [Click here to view Marketing Partner Single View pages](./Marketing-Partner-Single-View) * [Click here to view Media Channel Single View pages](./Media-Channel-Single-View) # All Sources Source: https://docs.pingtree.com/documentation/campaign/sources/all-sources Complete list of all your active, paused, and inactive traffic sources with quick access to configurations. The **All Sources** section provides a high-level overview of your traffic sources and their associated metrics. All Sources From this view, users can: * Create a new **Source** (Media Channel, Marketing Partner, or Custom Source). * Customize which columns are displayed in the table. * Apply a **Date Range Filter** to narrow down the data. This section also includes multiple report views across different fields. ### Key Uses * Monitor **Revenue** and **Payouts** across **all sources**. * Analyze performance for **each source individually** in a tabular format. All Sources ## Adding a Source To add a new source: 1. Click the **“+ Add Source”** button. 2. Choose the type of source you want to create. 3. This can be done from: * The **All Sources** section within a campaign * Or the individual **source type tab** (CS, MP, or MC) # Conversion Management Source: https://docs.pingtree.com/documentation/campaign/sources/conversion-management Review and manage conversions including status, approval, and payout adjustments per lead. All Sources Users have the flexibility to configure individual sources—or all sources collectively—to require manual approval for each lead conversion. This feature allows for greater control over lead quality before payouts are finalized. The setting to enable or disable manual approval is available in two places: * Within the “Source Single” view under the Payout Settings, where it applies to a specific source. * Or at the Campaign-level Payout Settings, where it can be applied across multiple sources linked to that campaign. Once manual approval is enabled, any lead that generates a conversion event will not be automatically approved. Instead, it will appear in the Conversion Management view—a dedicated interface where users can review and manually approve or reject each lead before it proceeds to payout or further processing. # Custom Reports Source: https://docs.pingtree.com/documentation/campaign/sources/custom-report Create and save personalized reports based on source performance, fields, and time filters. ## Overview The **Custom Report** feature in Pingtree (PT) allows campaign owners to create and configure personalized reports for their **Marketing Partners (MPs)**.\ By default, MPs have access to only basic information about the leads they generate.\ However, using the **Custom Report** functionality, the campaign owner can curate a detailed, tailored report and make it available to specific MPs. ## Key Features * **Create Custom Reports for MPs**\ Campaign owners can generate customized views with specific metrics and KPIs relevant to each MP's needs. * **Save and Assign Reports**\ When saving a report, users can: * Enter a name for the report * Select one or multiple Marketing Partners to whom the report should be made available * Choose a time interval for the data * Set the timezone * **Enhanced Data Visibility**\ This feature empowers campaign owners to provide more detailed and actionable data to their MP users, beyond the default basic reports. ## How It Works 1. Navigate to the **Custom Report** tab. All Sources 2. Configure your report by filtering and selecting the required columns and metrics. 3. Click on the **Save** button. 4. Fill out the following fields in the Save Report popup: * **Name:** Name of the report * **Select Marketing Partner:** Choose one or more MPs * **Select Time Interval:** Define the time range for the report data * **Select Timezone:** Set the report's timezone 5. Save the report and it will become visible to the selected Marketing Partners when they log in. All Sources *** > **Note:**\ > Custom reports help bridge the gap between your internal analytics and what your partners see, making the reporting process flexible, controlled, and highly customizable. # Custom Sources Source: https://docs.pingtree.com/documentation/campaign/sources/custom-sources Set up and configure direct or third-party sources not associated with a marketing partner account. Custom sources refer to the various traffic origin points that your organization manages directly or works closely with—this includes affiliates, publishers, internal traffic sources, and media partners. A custom source is typically created manually by someone within your team. When a new custom source is set up, the system assigns it a unique source ID, generates a dedicated tracking link, and provides an API endpoint. These tools are then shared with the source (e.g., your affiliate or publisher) so they can begin sending traffic or leads into your campaign accurately. By default, Pingtree (PT) creates two built-in sources: Organic Source and Unmatched Leads Source. The Organic Source captures any incoming traffic that does not include a specific partner or source ID in the URL parameters. If a partner or source ID is not explicitly included in the traffic URL (via the query string), the system will automatically categorize that traffic under the Organic Source. All Sources ## Overview Under the **Custom Sources** tab, users can manually create a new traffic source that may not be a traditional media channel or marketing partner. ## How It Works 1. Navigate to the **Custom Sources** tab. 2. Click on the **Add Custom Source** button. 3. A popup will appear asking for a **Name** of the custom source. 4. Enter the desired name and click Next. 5. Now, if you want to, you can set up a global, daily, or monthly cap on click, form, and call. Once done, click **Submit**. All Sources 6. Once added, the custom source will be available in listings and can be used for: * Tracking traffic. * Assigning leads. * Managing payouts and reporting. * [Click here to view Custom Source Single View pages](../source-single-view/Custom-Source-Single-View) ## Important Notes * No complex integration is needed for custom sources. * Useful for partners or sources that are offline, experimental, or non-standard. * Custom sources allow you to capture and organize traffic from non-traditional origins in PT. *** > **Tip:**\ > Use clear and descriptive names for custom sources to keep your reporting organized and easy to understand. # Facebook Enhanced Conversions Source: https://docs.pingtree.com/documentation/campaign/sources/facebook-enhanced-conversions How to send event-level conversions to Facebook with hashed user data, fbp/fbc tracking, and multi-buyer support. Some campaigns require more precise optimization than simply firing Facebook pixels on form loads. This integration uses Facebook's Conversions API (CAPI) to send server-side events directly from Pingtree, giving you better attribution and match rates. Use this when you need to: * Optimize ads toward **offline conversions** (e.g., successful sales, funding events). * Fire different events depending on **which buyer** receives the lead. * Track **multiple funnel events** across the same session (e.g., submission, sale, upsell). This guide walks you through setting up Facebook’s Conversions API (CAPI) with Pingtree’s routing logic, and how to use stored identifiers like `facebook_fbc` and `facebook_fbp` to improve attribution and match rates. *** ## Capturing FBP & FBC Automatically When a lead hits a Pingtree-hosted form or funnel that includes a Facebook ad click, we automatically extract and store the following cookies: | Cookie Name | Field Stored In | Purpose | | ----------- | --------------- | ------------------------------------------------------ | | `fbp` | `facebook_fbp` | Identifies browser session for retargeting | | `fbc` | `facebook_fbc` | Stores Facebook Click ID (from fbclid) for attribution | These values are attached to each lead object and included in any Facebook Conversions API requests made from Pingtree. Including these increases **event match rate**, which directly improves optimization performance in Meta Ads Manager. *** ## Step 1: Obtain Access Token from Business Manager To send events through the Facebook API, you must request to generate a token: 1. Log into [Facebook Business Manager](https://business.facebook.com/) 2. Go to **Events Manager** 3. Select the **Pixel** associated with the campaign 4. Go to the **Settings** tab 5. Find the **Conversions API** section 6. Click **Generate Access Token** under *Set up manually* Facebook/Meta Bearer Token **Important:**\ Only users with **developer privileges** can generate tokens. Once generated, copy and store the token securely—it will only be shown once and expires in **60 days**. We recommend creating a recurring calendar reminder to rotate tokens, until we roll out automated refresh support. Reference: [Facebook Conversions API Docs](https://developers.facebook.com/docs/marketing-api/conversions-api/get-started/) *** ## Step 2: Determine the Event Trigger Facebook conversion events can be fired from different parts of the funnel depending on campaign goals. Pingtree supports custom event triggers via postbacks, API events, and routing filters. ### Available Trigger Types You can map any standard Facebook event name — or custom events created in your Business Manager — to any Pingtree event. Here are common trigger points: | Trigger | When It Fires | Configure At | | ----------------------------- | ------------------------------------ | ---------------------------------------------------------------- | | **Form Submission** | User submits a form | Source > Postbacks > On Form Submit | | **Lead Sold** | Lead is accepted and sold to a buyer | Distribution > Posting API | | **Offer Wall Click** | User clicks on an offer | Source > Postbacks > On Offer Click | | **Offer Wall Conversion** | User completes a third-party offer | Requires conversion pixel or S2S postback from the offer network | | **Custom Buyer-Based Events** | Lead is routed to a specific buyer | Distribution > Routing Rules with event conditions | > **Tip:** Buyer-based events let you fire different Facebook events depending on which buyer receives the lead. This is useful for A/B testing ad optimization across different buyer segments. Facebook Event Static Field *** ## Step 3: Send Events to Facebook **Endpoint:** ``` POST https://graph.facebook.com/v25.0/{PIXEL_ID}/events ``` **Headers:** ``` Authorization: Bearer {ACCESS_TOKEN} Content-Type: application/json ``` Replace `{PIXEL_ID}` and `{ACCESS_TOKEN}` with the appropriate values provided by the Business Manager. *** ## Required Fields and Hashed Data Facebook requires all personally identifiable information (PII) to be SHA-256 hashed before being sent. Pingtree handles this automatically via data transformers. ### Pingtree Field → Facebook CAPI Mapping | Pingtree Field | Facebook Field Key | JSON Path in Payload | Notes | | ---------------------- | ----------------------- | ------------------------------------ | ---------------------------------------------------- | | `email` | `em` | `data.0.user_data.em` | SHA-256 hashed | | `mobile` | `ph` | `data.0.user_data.ph` | SHA-256 hashed | | `first_name` | `fn` | `data.0.user_data.fn` | SHA-256 hashed (optional, improves match rate) | | `last_name` | `ln` | `data.0.user_data.ln` | SHA-256 hashed (optional, improves match rate) | | `facebook_fbp` | `fbp` | `data.0.user_data.fbp` | Helps with browser/session-level attribution | | `facebook_fbc` | `fbc` | `data.0.user_data.fbc` | Captures original Facebook ad click via fbclid | | `ip` | `client_ip_address` | `data.0.user_data.client_ip_address` | Required if user agent is missing | | `user_agent` | `client_user_agent` | `data.0.user_data.client_user_agent` | Strongly recommended | | `utc_timestamp` | `event_time` | `data.0.event_time` | UNIX timestamp in UTC | | `event_name` | `event_name` | `data.0.event_name` | ex: `Lead`, `CompleteRegistration`, etc. | | `custom_data.value` | `value` | `data.0.custom_data.value` | Revenue or sale amount | | `custom_data.currency` | `currency` | `data.0.custom_data.currency` | Usually `"USD"` | | *(static or dynamic)* | `action_source` | `data.0.action_source` | Typically `"web"` | | `fbclid` | *(used to build `fbc`)* | `data.0.user.fbclid` | Used if `facebook_fbc` not directly available | | `test_event_code` | `test_event_code` | `data.0.test_event_code` | **Used for testing only** — Do not use in production | ## Use these mappings to ensure accurate event payloads and maximize match rates across Facebook Ads. ## Sample Payload ```json theme={null} { "data": [ { "event_name": "CompleteRegistration", "event_time": 1655321234, "action_source": "web", "user_data": { "em": "c3fcd3d76192e4007dfb496cca67e13b", "ph": "b7c3d3d131bde4123ac85b9e6807631f", "fbp": "fb.1.1621245218912.1234567890", "fbc": "fb.1.1621245218912.AbCdEfGhIjKlMnOpQrStUvWxYz" }, "custom_data": { "value": 50.0, "currency": "USD" } } ] } ``` *** ## Attribution Accuracy Tips * Always include `fbp` and `fbc` if available. * Use real event timestamps in UTC to avoid time drift issues. * Don’t reuse old tokens — Facebook will silently reject or downrank expired tokens. * Consider hashing additional identifiers (first name, last name, IP) to improve matching. *** ## FAQ **Do I need extra consent to send hashed PII to Facebook?** If you already display a consent disclosure or cookie banner and your privacy policy references Facebook Ads, you are covered under standard CAPI usage. Hashing PII before transmission complies with Facebook’s terms. **Can I send multiple events per session?** Yes. Pingtree supports triggering multiple events (e.g., form submit, sale, upsell) in sequence. Each event can be tied to routing logic or source filters. **What if I want to suppress Facebook events for specific buyers?** Pingtree supports conditional filtering at the buyer or source level. You can define postback conditions per route or event type. *** ## Troubleshooting To test your server-side events with Facebook, retrieve a `test_event_code` from your Meta Events Manager: 1. In Meta Events Manager, locate the pixel you're using and copy the `test_event_code`. 2. Go to your **Postback Setup** in Pingtree (Source or Distribution). 3. Scroll to the bottom and create a new **Static Field**: * **Key**: `test_event_code` * **Value**: the code you copied. Once saved, use the **Test Postback** tool at the top of the Postback Settings page. ### Testing Guidelines * Use a `transaction_id` tied to a real ad-clicked lead whenever possible. * If unavailable, construct the payload manually using known test data. * Use a SHA-256 hashing tool to hash sensitive fields like `email` and `phone`. * Use a current UNIX timestamp from [epochconverter.com](https://www.epochconverter.com/) for the `event_time` field. *** For implementation help, contact your account manager or reach out via **Live Support** in the Pingtree app. # Field Management Source: https://docs.pingtree.com/documentation/campaign/sources/field-management Control and customize incoming field structures and validations globally across all traffic sources and campaigns. Field Management gives you full control over which fields are collected, validated, and displayed for each lead submission method across your system — including Form, Ping, and Post APIs. > Accessible from the **top navigation bar**, this tool manages system-wide fields like `transaction_id`, `lead_id`, `first_name`, `email`, `phone`, and many more. All Sources *** ## Getting Started with Field Management ### Step 1: Understand What Fields Are Each field (like **Email**, **Phone**, or **Zip Code**) is a data point collected from your leads. You decide which fields are important and where they are required. *** ### Step 2: Turn Fields On or Off * **Toggle ON** — Field is enabled and usable. * **Toggle OFF** — Field is not used in your campaign/API. *** ### Step 3: Choose Where It’s Required Choose field requirements at each stage of the lead flow: | Requirement Option | Description | | ------------------ | ------------------------------------------------------------------------ | | **Form Required** | Needed in the **Form API** (when user submits data via your funnel). | | **Ping Required** | Needed in the **Ping API** (used for validation before full lead post). | | **Post Required** | Needed in the **Post API** (after ping is approved, final data is sent). | Enable any combination based on your workflow. *** ### Step 4: Show Field in Posting Specs * **Posting Spec Switch** → Enables field visibility in the source-facing **API documentation**. * Helps partners understand what fields they must pass for each API type. *** ### Step 5: Set Validation Rules (Optional) * **Acceptable Values** – Define allowed values (e.g., only `"yes"` or `"no"`). * **Rejection Rules** – Automatically reject leads that don’t meet defined criteria. *** ### Step 6: Add Helpful Descriptions Add a description to each field (e.g., “User’s primary phone number”) to help traffic sources understand what data to provide. *** ### Step 7: Apply Changes Globally (Optional) Use the **Apply to All Sources** option to apply your settings across every source instantly — avoiding repetitive setup. *** ## Field Manager – Add Fields Guide All Sources When you click **“Add Fields”**, a sidebar opens to help you configure your campaign’s data structure. It’s divided into sections: ### System Fields * Core fields like `email`, `phone`, `first_name`, etc. * Common across all campaigns. * Automatically reusable. ### Vertical Fields * Based on the campaign’s **selected vertical** (Debt Relief, Tax, Legal, etc.). * Only shows fields relevant to that vertical. ### Custom Fields * Manually created for your campaign. * Useful for extra data points not covered by system/vertical fields (e.g., `custom_code`). ### Other Vertical Sections * Add fields from other categories, even if not your primary vertical. * Expand and **“Add Fields +”** as needed. Each field row includes: | Field | Description | | -------------- | -------------------------------------------------- | | **Field Name** | User-friendly label (e.g., “Monthly Gross Income”) | | **Parameter** | System/internal key (e.g., `monthly_gross_income`) | | **Action** | “Add Fields +” to include | Don’t forget to **Save Fields** after changes. *** ## Field Enablement – System-Wide Impact ### 1. Lead/Click/Call Routing **Path:**\ `distribution → advertiser/customEndpoint → leadRouting / clickRouting / callRouting` * Enabled fields appear in the **Lead Fields** section. * Shows label, parameter name, and input box for value. * Fields can be **mapped** manually or left empty. * New fields added appear at the **bottom** of the list. *** ### 2. Reporting Table Column Selector * Enabled fields appear in the **"Table Columns"** modal. * New fields default to **toggle OFF**. * Toggle ON to make field a visible column in reports. * Supports **draggable ordering**. * Populates table rows if lead data exists for the field. *** ## Key Benefits of Field Management **Cleaner Data** – Enforce formatting, validations, and requirements.\ **Faster Integrations** – Clearly documented requirements for partners.\ **Better Control** – Customize requirements per step and per campaign.\ **Clear API Specs** – Accurate, auto-generated docs.\ **Time Savings** – Apply globally across all sources.\ **Consistent Quality** – Reduce junk data and increase conversion rates.\ **Smart Filtering** – Only show fields relevant to selected verticals.\ **Organized UI** – Find and add fields quickly by type.\ **Flexible Expansion** – Add fields from other verticals when needed.\ **Form Precision** – Keep lead forms clean by including only what's needed.\ **Per-Campaign Customization** – Tailor field setup uniquely for each campaign. # Marketing Partners Source: https://docs.pingtree.com/documentation/campaign/sources/marketing-partners Manage affiliate and marketing partner relationships, access their settings, reports, and dashboards. Marketing partners function similarly to custom sources in that they can be affiliates, publishers, or third-party traffic providers who send leads or traffic to your campaigns. However, the key distinction lies in the level of access and transparency they are given. Unlike a typical custom source, marketing partners are provided with their own dedicated affiliate portal within the Pingtree system. This portal allows them to log in and monitor the performance of the traffic they are sending to your campaigns. They can view metrics such as the number of leads submitted, approval rates, conversion rates, earnings, and other relevant performance indicators. This setup creates a more professional and scalable relationship, giving partners greater visibility and incentive to optimize their traffic quality. It also simplifies communication and reporting, as partners can independently track their results in real time without needing manual updates from your team. Under the **Marketing Partners (MP)** tab, campaign owners can invite new marketing partners to join Pingtree (PT) and collaborate on lead generation campaigns. All Sources ## How It Works 1. Navigate to the **Marketing Partners** tab. 2. Click on the **Add Marketing Partner** button. 3. A popup will appear asking for the **email address** of the Marketing Partner. 4. Enter the email address and click **Next**. 5. Now, if you want to, you can set up a global, daily, or monthly cap on click, form, and call. Once done, click **Submit**. All Sources 6. Pingtree will automatically send a **registration invitation** email to the provided address. 7. The Marketing Partner must follow the link in the email to **register and create their account** in PT. 8. Once registered, the Marketing Partner will be able to **log in and access the assigned campaigns**. * [Click here to view Marketing Partner Single View pages](../source-single-view/Marketing-Partner-Single-View) ## Important Notes * Marketing Partners cannot access the platform until they complete the registration process. * After registration, they can view leads, reports, and other campaign-specific data based on their access permissions. *** > **Tip:**\ > Always verify the email address before submitting to avoid sending invitations to the wrong person. # Media Channels Source: https://docs.pingtree.com/documentation/campaign/sources/media-channels Group and manage sources based on their marketing channel type for better organization and reporting. Media channels are the platforms you may be driving your 1st party media from. Pingtree has integrations with a number of media platforms including Meta (Facebook), TikTok, Google, YouTube, Bing, and Instagram to name a few. If you have an internal media team and wish to manage your creatives and analyze creative performance, setting these up in media channels will be a great option. If you work with a 3rd party agency which manages your media efforts and don't want them to have access to your Pingtree account, that's not a problem! You can still create them as a custom source and provide them a tracking link with the attribution parameters you'd need to analyze performance. Under the **Media Channels** tab, campaign owners can integrate different traffic sources (media channels) into their Pingtree (PT) account to track lead generation more effectively. All Sources ## How It Works 1. Navigate to the **Media Channels** tab. 2. Click on the **Add Media Channel** button. 3. A popup will appear displaying a list of available media channels: * Meta (Facebook) * Instagram * LinkedIn * Google * TikTok 4. Click the **plus (+) icon** next to the desired media channel to initiate integration. 5. Once successfully integrated, the Media Channel will appear in the listing. 6. From the listing, the campaign manager can: * **Edit** the integration settings. * **Access the tracking URL** specific to that media channel. * [Click here to view Media Channel Single View pages](../source-single-view/Media-Channel-Single-View) ## Important Notes * Each media channel integration might have its own set of permissions and requirements. * Tracking URLs are essential for accurate attribution of leads coming from different media sources. *** > **Tip:**\ > Integrating multiple media channels allows better tracking and attribution for traffic sources, improving campaign performance analysis. # Sources Overview Source: https://docs.pingtree.com/documentation/campaign/sources/sources-overview High-level dashboard displaying performance metrics aggregated across all traffic sources. ## What is a Source? Your **sources** represent the starting point of the lead generation funnel in Pingtree.\ Setting up your traffic sources correctly is crucial for campaign success and accurate tracking. Any channel that generates traffic to your campaign is managed within the **Sources** section of the application. ### Pingtree categorizes sources into three types: 1. **Custom Sources (CS)** 2. **Marketing Partners (MP)** 3. **Media Channels (MC)** Each source type is automatically assigned a unique identifier when created, which helps distinguish the type and instance of the source. **Identifier Format:** * `cs123` → Custom Source * `mp123` → Marketing Partner * `mc123` → Media Channel *** ## Source Type Differences | Feature | Custom Source | Marketing Partner (MP) | Media Channel (MC) | | ----------------------- | ---------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | | **What it is** | A manually created traffic source | An individual or agency sending you leads | An advertising platform used to drive traffic | | **How to Add** | Enter a name only | Enter email → Send invite → MP registers and logs in | Select platform → Click "+" to integrate | | **Purpose** | For offline, internal, or non-standard traffic | For affiliates, publishers, and external lead generators | For tracking traffic from ad platforms like Meta, Google | | **Integration Needed?** | No | Yes (via user registration) | No | | **Example Use Case** | Manual CSV uploads, trade shows, test leads | Affiliate sending web form leads | Leads from Facebook Ads, Google Ads, LinkedIn | | **Identifier Format** | `cs123` | `mp123` | `mc123` | *** ## Summary * **Custom Source** → Simple, name-only setup for miscellaneous or manual traffic. * **Marketing Partner** → External individuals or teams sending leads with their own login and portal. * **Media Channel** → Integrated ad platforms pushing paid traffic with built-in tracking support. Each source type plays a specific role and helps ensure accurate tracking, reporting, and lead attribution across your campaigns. # Sub-Source Payouts Source: https://docs.pingtree.com/documentation/campaign/sources/sub-source-payouts Set granular payout amounts for individual sub-sources (publisher IDs) within a marketing partner's traffic, separately by media type. ## Overview **Sub-Source Payouts** give you granular control over how much individual sub-sources are paid within a marketing partner's traffic. Rather than applying a single payout rate to an entire marketing partner, you can configure distinct payout amounts for each publisher ID (PID) that the partner sends traffic from. Navigate to a **Marketing Partner** source within a campaign and open the **Sub-Source Payouts** tab to access these settings. *** ## What Are Sub-Sources? A marketing partner typically aggregates traffic from multiple publishers, each identified by a unique **Publisher ID (PID)**. These PIDs are referred to as sub-sources within Pingtree. For example, a single marketing partner may send traffic from dozens of individual publishers. Sub-source payouts allow you to reward high-performing publishers with a higher payout, or reduce payouts for lower-quality traffic — all without changing the global payout settings for the marketing partner as a whole. *** ## Payout Field Selection Before setting individual sub-source payouts, you must select which field is used to identify sub-sources. The available payout field options are: | Field | Description | | --------------------------- | -------------------------------------------------------------------- | | **Sub IDs** (`sub1`–`sub5`) | Standard sub-ID parameters passed with each lead or click | | **Buyers** | Override payouts at the buyer level rather than the sub-source level | Once a payout field is selected, all configured sub-source values are matched against that field on incoming traffic. > **Note:** When **Buyers** is selected as the payout field, you cannot add custom field values — payout overrides are applied directly to each buyer configured in the campaign. *** ## Configuring Sub-Source Payout Amounts For each sub-source value (PID), you can set a payout override per media type: ### Media Types | Media Type | Description | | --------------- | ------------------------------------------------------------------- | | **Click** | Payout applied when the sub-source generates a click event | | **Lead (Form)** | Payout applied when the sub-source generates a form lead submission | | **Call** | Payout applied when the sub-source generates a call event | ### Payout Structure Options Each sub-source payout can use one of two payout models: | Model | Description | | ----------------- | --------------------------------------------------------------------- | | **Fixed Cost** | Pay the sub-source a fixed dollar amount per event | | **Revenue Share** | Pay the sub-source a percentage of the revenue received for the event | These settings override the global payout configured at the marketing partner level for any sub-source that has an explicit override defined. *** ## Adding Sub-Source Values To add a new sub-source PID for payout configuration: 1. Navigate to the **Sub-Source Payouts** tab for the marketing partner source. 2. Select the **Payout Field** (e.g., `sub1`, `sub2`) to use for matching. 3. Click **Add Field Value** and enter the PID or sub-source identifier. 4. Set the payout amount and model for each applicable media type. 5. Save the configuration. > Each added field value must exist in the selected payout field's list. Duplicates are automatically de-duplicated. *** ## Scrub Settings Sub-source payouts also include **Scrub Settings**, which allow you to automatically stop paying a sub-source after it reaches a defined threshold — either by number of leads (unit-based) or by total payout amount (revenue-based). ### Enabling Scrub Settings 1. Toggle **Enable Scrub** on for the sub-source. 2. Select the scrub basis: * **Unit-Based**: Stop paying after a set number of leads (must be greater than 1). * **Revenue-Based**: Stop paying after a set revenue amount is reached (must be greater than \$1). 3. Configure the threshold separately for **Click** and **Form** media types. > You cannot enable both unit-based and revenue-based scrub simultaneously for the same media type. *** ## Use Cases * **Reward high-quality sub-sources**: Set a higher fixed payout or revenue share for publisher IDs that consistently deliver high-converting leads. * **Penalize low-quality traffic**: Reduce or zero out the payout for sub-sources with high rejection rates or low conversion quality. * **Scrub unprofitable sub-sources**: Use scrub settings to automatically cap payouts once a sub-source has been paid a certain amount, regardless of volume. * **Buyer-level payout overrides**: Use the Buyers payout field to adjust what each buyer is credited per sub-source-driven lead. *** ## Audit Trail All sub-source payout changes are automatically recorded in the platform's **Audit Logs** (Settings Logs) under the `payout` log type. Each change captures the old and new payout values, the affected source, and the user who made the change. # Sub ID Report Source: https://docs.pingtree.com/documentation/campaign/sources/subid-report Analyze traffic and performance by sub-ID to optimize traffic quality and partner segmentation. All Sources ## Overview The **Sub ID Report** is a reporting feature that enables users to analyze incoming traffic at a granular level. When a traffic source sends leads—either through your owned and operated web properties or directly to your campaign endpoint—it often includes additional attribution details. These may include the original campaign, specific ad creatives, keywords, or any other relevant tracking parameters that help identify the source and context of the lead. The Sub ID Report compiles this data and presents it in a flexible, filterable format. Users can filter results by: * **Source** – The origin of the traffic (e.g., custom source, marketing partner, or media partner) * **Sub ID (or custom attribute)** – The tracking values included with the lead (e.g., ad ID, keyword, campaign name, State) * **Date Range** – The time period for the report This tool provides valuable insights into traffic performance, allowing for better optimization, partner management, and decision-making. # Terms & Policies Source: https://docs.pingtree.com/documentation/campaign/sources/terms-and-policies Manage custom T&Cs or compliance requirements for traffic sources and partners. ## Overview Pingtree gives users the ability to send out their terms and conditions to affiliates. Simply add in your terms and policy language, and select “Save Terms” Any time a new marketing partner has been invited to a users campaign, they will see these terms and conditions upon them logging into their affiliate dashboard. In order for them to access their dashboard, they will be required to approve the specified terms and conditions. This will only occur in the first instance of a marketing partner accessing their affiliate dashboard. ![][image14] [image14]: data:image/png;base64,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 # TikTok Enhanced Conversions Source: https://docs.pingtree.com/documentation/campaign/sources/tiktok-enhanced-conversion Send server-side conversion events to TikTok via the Events API with ttclid tracking and buyer-level event triggers. You can optimize your TikTok ads based on events that happen after form submission — such as sales, offer completions, or buyer acceptance — by sending server-side events from Pingtree to TikTok's Events API. This gives you more accurate attribution than pixel-based tracking alone, especially when combined with the `ttclid` click identifier. *** ## Capturing the TikTok Click ID When a lead arrives from a TikTok ad, Pingtree automatically captures the `ttclid` parameter from the URL and stores it on the lead record. This identifier links the conversion back to the specific ad click, improving match rates in TikTok Ads Manager. *** ## Step 1: Generate an Access Token 1. Log into [TikTok Ads Manager](https://ads.tiktok.com/). 2. Open the **Pixel** you want to track with. 3. Go to the **Settings** tab. 4. Click **Generate Access Token** under *Server-Side Tracking*. Save this token securely — you'll need it to authorize all API calls. Tokens expire periodically, so set a reminder to rotate them. *** ## Step 2: Define Conversion Points TikTok conversion events can be tied to any stage in the lead lifecycle. You can map any TikTok standard event or custom event to a Pingtree trigger: | Trigger | When It Fires | Configure At | | ----------------------------- | ---------------------------------- | -------------------------------------------------- | | **Form Submission** | User submits a form | Source > Postbacks > On Form Submit | | **Lead Sold** | Lead is accepted by a buyer | Distribution > Posting API | | **Offer Wall Click** | User clicks on an offer | Source > Postbacks > On Offer Click | | **Offer Wall Conversion** | User completes a third-party offer | Source > Postbacks > Filter by Events | | **Custom Buyer-Based Events** | Lead is routed to a specific buyer | Distribution > Routing Rules with event conditions | *** ## Step 3: Send Events to TikTok **Endpoint:** ``` POST https://business-api.tiktok.com/open_api/v1.3/event/track/ ``` **Headers:** ``` Access-Token: {YOUR_ACCESS_TOKEN} Content-Type: application/json ``` > **Tip:** Confirm the exact endpoint version in your TikTok Events Manager, as TikTok may update the API version over time. *** ## Payload Field Mapping | Pingtree Field | TikTok Field | JSON Path | Notes | | ---------------- | -------------- | -------------------------------- | ---------------------------------------- | | `email` | `email` | `data.0.user.email` | SHA-256 hashed | | `mobile` | `phone_number` | `data.0.user.phone` | SHA-256 hashed | | `transaction_id` | `event_id` | `data.0.event_id` | Unique per event | | `ip` | `ip` | `data.0.user.ip` | Improves match rate | | `user_agent` | `user_agent` | `data.0.user.user_agent` | Recommended | | `ttclid` | `ttclid` | `data.0.user.ttclid` | TikTok click identifier | | `utc_timestamp` | `timestamp` | `data.0.event_time` | UNIX timestamp in UTC | | `revenue` | `value` | `data.0.properties.value` | Revenue or sale amount | | *(static)* | `event_source` | `event_source` | Set to `"web"` | | *(custom)* | `event` | `data.0.event` | e.g., `CompleteRegistration`, `Purchase` | | *(static)* | `currency` | `data.0.properties.currency` | Usually `"USD"` | | *(static)* | `content_type` | `data.0.properties.content_type` | Usually `"product"` | *** ## Sample Payload ```json theme={null} { "event_source": "web", "event_source_id": "{PIXEL_ID}", "data": [ { "event": "CompleteRegistration", "event_time": 1655321234, "event_id": "txn_abc123", "user": { "email": "c3fcd3d76192e4007dfb496cca67e13b", "phone": "b7c3d3d131bde4123ac85b9e6807631f", "ttclid": "E.C.P.abc123xyz", "ip": "203.0.113.1", "user_agent": "Mozilla/5.0..." }, "properties": { "value": 50.0, "currency": "USD", "content_type": "product" } } ] } ``` *** ## Attribution Tips * Always include `ttclid` when available — it is the strongest signal for TikTok attribution. * Hash `email` and `phone` with SHA-256 before sending. Pingtree's data transformer can handle this automatically. * Use real event timestamps in UTC to avoid time drift issues. * Include `ip` and `user_agent` to improve match rates when `ttclid` is not available. *** ## Troubleshooting TikTok provides a **Test Events** tool in the Events Manager to validate your server-side events before going live: 1. In TikTok Events Manager, locate your pixel and find the **Test Events** section. 2. Copy the test event code. 3. In Pingtree, go to your postback configuration and add a static field with the test code. 4. Fire a test event using the **Test Postback** tool in Pingtree. 5. Check TikTok Events Manager to confirm the event was received and matched. For implementation help, contact your account manager or reach out via **Live Support** in the Pingtree app. # Tracking Links Source: https://docs.pingtree.com/documentation/campaign/sources/tracking-links Create, manage, and monitor tracking URLs assigned to traffic sources for attribution and routing. ## What are tracking links? A tracking link is a specially formatted URL that includes additional parameters to help marketers identify the source of web traffic. In lead generation and source attribution, these links allow businesses to monitor where leads are coming from, such as specific campaigns, ads, or channels. By analyzing this data, marketers can determine which channels are most effective in driving conversions and optimize their marketing strategies accordingly. Pingtree allows users to quickly generate unique tracking links for traffic sources. In fact, as soon as a new source (media channel, marketing partner, custom source) is created, a unique tracking link is automatically assigned to that source. There are two types of tracking links. Direct tracking links and redirect tracking links. When deciding between a direct tracking link and a redirect tracking link in lead generation, marketers consider several factors related to their campaign goals, user experience, and data collection needs. ## Direct Tracking Links Direct tracking links provide a higher level of transparency as users are able to see the full URL including the tracking parameters. Another benefit of using direct tracking links is a reduced level of complexity. There are fewer steps in the link process compared to redirect tracking links meaning there’s less chance for something to go wrong. ![][image9] The Pingtree transaction ID is generated directly on your web property when a direct tracking link is clicked. ## Redirect Tracking Links A redirect in lead generation is a method where a user clicks on a link that initially takes them to a different page (the redirecting page) before ultimately guiding them to the intended destination (the final landing page). This intermediary step can serve multiple functions, such as tracking, analytics, or providing additional information. Redirect tracking links provide some benefits that direct tracking links can’t. One major benefit redirect tracking links offer is the ability to perform A/B tests. Redirects facilitate A/B testing by allowing marketers to send users to different landing pages without changing the original link shared in campaigns. ![][image10] Unlike a direct tracking link where the Pingtree transaction ID is generated through the web property itself when clicked, a redirect tracking link generates the Pingtree transaction ID from within the Pingtree application when clicked. **NOTE ABOUT REDIRECT TRACKING LINKS**\ **It’s not advisable to use redirect tracking links for media channels** ## Where do tracking link URLs come from? Once a domain (or sub-domain) is added into a users domain management section, users will be able to connect it to a campaign. This is where the base URL of the direct tracking link comes from. The redirect URL will need to be purchased in your domain management section. Once this has been purchased, users will be able to connect this to the campaign as well. ## Link Routes Within the tracking links section, users may choose the specific routing of their tracking link they want to use for a given source. All Sources ### Direct Sell Direct sell is used when lead data is being delivered directly to an endpoint, bypassing a web property altogether. ### External Domain An external domain link route would be used IF you have a web property built outside of Pingtree’s funnel builder. ### Funnel Index Funnel index will route those who click on your tracking link to the landing page (i.e. index page) of your web property built within the Pingtree funnel builder ### Direct Funnel Direct funnel allows users to configure the tracking link so leads will bypass a landing page and be directed straight to a form flow built within the Pingtree funnel builder. ### Direct Offer Page Direct offer pages refer to offerwall pages or “other” pages created in the Pingtree funnel builder. This option will allow users to specify which offer page they want leads to be directed to once the tracking link is clicked. ### Direct Thank You Page Direct thank you page allows users to specify a thank you page created in the Pingtree funnel builder where leads will be directed to once the tracking link is clicked. [image9]: data:image/png;base64,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 [image10]: data:image/png;base64,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 # Campaign Team Source: https://docs.pingtree.com/documentation/campaign/team-overview Manage team members, roles, and ownership within a campaign to control who has access and what they can do. ## Overview The **Campaign Team** page shows everyone who has been granted access to this specific campaign. Campaign access is separate from platform-level roles — a user can be a member of this campaign without having access to all campaigns in your organization. From this page you can add team members, adjust their access level, transfer campaign ownership, and assign account managers. *** ## Viewing Team Members The team list shows all users currently assigned to the campaign: | Column | Description | | ------------------- | ---------------------------------------------------------------------- | | **Name** | Full name of the team member | | **Email** | The user's login email address | | **Role** | Their access level within this campaign | | **Account Manager** | Whether this user is designated as an account manager for the campaign | | **Date Added** | When the user was granted access | *** ## Campaign Owner Every campaign has one **owner**. The campaign owner: * Has full access to all campaign settings, data, and actions. * Is the default point of contact for the campaign. * Is the only user (along with admins) who can transfer ownership to another user. * Cannot be removed from the campaign without first transferring ownership. The owner is indicated by a badge in the team list. *** ## Role-Based Permissions Team members are assigned a role that controls what they can see and do within the campaign: | Role | Capabilities | | ------------- | ------------------------------------------------------------------ | | **Admin** | Full access — same as the campaign owner | | **Edit** | Can view and modify campaign settings, sources, and distribution | | **View Only** | Can view all campaign data and reports but cannot make any changes | > **Note:** Platform-level roles (set in Team Management) take precedence. A platform-level View Only user cannot be given Edit access at the campaign level. *** ## Adding a Team Member To grant a user access to this campaign: 1. Navigate to the **Team** section within your campaign. 2. Click **Add Member**. 3. Search for the user by name or email address. 4. Select the appropriate role from the dropdown. 5. Click **Confirm**. The user will immediately gain access to the campaign at the selected role level. > **Tip:** Add team members before your campaign goes live so they can review configurations and settings during the setup phase. *** ## Updating a Team Member's Role If a team member's responsibilities change, you can update their role at any time: 1. Find the user in the team list. 2. Click the role dropdown next to their name. 3. Select the new role. 4. The change takes effect immediately. *** ## Removing a Team Member To remove a user's access to this campaign: 1. Find the user in the team list. 2. Click the actions menu (three-dot icon) next to their name. 3. Select **Remove from Campaign**. 4. Confirm the removal. The user will lose access immediately but their historical activity (edits, reports viewed) will remain in the audit log. *** ## Transferring Campaign Ownership If the current owner is leaving the team or handing off the campaign to another person, ownership can be transferred: 1. Navigate to the **Team** section. 2. Click **Transfer Ownership**. 3. Select the new owner from the list of current team members. 4. Confirm the transfer. After the transfer: * The selected user becomes the new campaign owner with full access. * The previous owner retains their current role (Edit or View Only) unless manually updated. > **Note:** Only the current campaign owner or a platform admin can initiate an ownership transfer. *** ## Account Managers Account managers are team members designated as the primary contact for a campaign. Assigning an account manager: * Signals to the broader team who is responsible for day-to-day campaign operations. * May be used in reporting and communication workflows depending on your organization's setup. **To assign an account manager:** 1. Find the team member you want to designate. 2. Click the actions menu next to their name. 3. Select **Set as Account Manager**. Only one account manager can be assigned at a time. Assigning a new one will replace the previous designation. *** ## Best Practices * Review campaign team membership quarterly to ensure only active team members retain access. * Use the View Only role for stakeholders who need visibility into reports but should not change configurations. * Always transfer ownership before offboarding a campaign owner — removing an owner without transferring leaves the campaign without a primary responsible party. * Assign an account manager to every active campaign so ownership and accountability are always clear. # Creative Comparison Source: https://docs.pingtree.com/documentation/creative-library/creative-comparison Compare multiple creatives side-by-side to evaluate performance metrics, identify top performers, and make informed decisions for A/B testing and campaign optimization. The **Creative Comparison** tool lets you select multiple creatives and evaluate them side-by-side across key performance metrics. It is designed to help you quickly identify which creatives are driving results and which need to be replaced — without manually cross-referencing individual creative reports. Creative Comparison page with performance metrics and compare creatives link *** ## Selecting Creatives to Compare You can initiate a comparison from two places: 1. **From the Creative Library** — select the checkboxes on two or more creative cards, then click **Compare Selected**. 2. **From the Comparison page directly** — use the creative picker to search and add creatives by name or ID. There is no hard limit on how many creatives you can compare at once, but for clarity, comparing **two to five creatives** at a time gives the most readable side-by-side view. *** ## Side-by-Side Performance Metrics Once creatives are selected, their metrics are displayed in aligned columns so you can compare values directly. | Metric | Description | | ---------------------------- | -------------------------------------------------------------- | | **Impressions** | Total number of times the creative was served. | | **Clicks** | Total clicks generated by the creative. | | **CTR (Click-Through Rate)** | Clicks as a percentage of impressions. | | **Conversions** | Number of leads or conversions attributed to the creative. | | **Conversion Rate (CVR)** | Conversions as a percentage of clicks. | | **Revenue** | Total revenue attributed to the creative. | | **Cost per Conversion** | Average cost to generate one conversion through this creative. | Metrics that are significantly higher or lower than the group average are highlighted automatically, so top and bottom performers are immediately visible. *** ## Comparing Across Campaigns and Sources By default, comparison metrics are aggregated across all campaigns and sources the creative has been used in. You can narrow the scope using the filters at the top of the comparison view: | Filter | Description | | -------------- | --------------------------------------------------- | | **Campaign** | Restrict metrics to a specific campaign. | | **Source** | Restrict metrics to traffic from a specific source. | | **Date Range** | Compare performance over a specific time window. | This is useful when a creative has been used across multiple campaigns and you want to evaluate its performance in one specific context rather than in aggregate. > **Tip:** If a creative performs well in one campaign but poorly in another, use the Campaign filter to isolate performance by context. The issue may be the audience or placement rather than the creative itself. *** ## Selecting Creatives for A/B Testing Once you have identified creatives you want to test against each other, you can designate them as an A/B test directly from the comparison view: 1. Select the creatives you want to test. 2. Click **Set as A/B Test**. 3. Assign the test to a campaign. 4. Configure the traffic split (e.g., 50/50 or weighted). 5. Save the test configuration. Pingtree will distribute traffic between the selected creatives according to the split and track results independently, so you can return to the comparison view later to evaluate the outcome with live data. *** ## Saving Comparison Selections Comparison sets can be saved so you do not have to rebuild them from scratch each time you want to revisit a group of creatives. * Click **Save Comparison** and give the set a name (e.g., *Q2 Banner Variants*). * Saved comparisons appear in the **Saved Comparisons** sidebar on the left of the page. * Open a saved comparison at any time to reload the same creatives with fresh metrics for the current date range. > **Tip:** Save a comparison set after a creative review meeting so you can quickly pull it up in the next session and see how metrics have evolved since then. *** ## Identifying Top Performers The comparison view is particularly useful for evaluating similar creative variations — for example, the same ad copy with different imagery, or the same design in multiple sizes. Common use cases: | Use Case | How to Use the Comparison Tool | | ----------------------------------------------- | --------------------------------------------------------------------------- | | Choosing the best banner from a set of variants | Compare all variants side-by-side and rank by CTR or CVR. | | Evaluating a creative refresh | Compare the old creative against the new one over the same date range. | | Reviewing creatives before pausing a campaign | Compare active creatives to determine which ones to keep live. | | Post-A/B test analysis | Load both test creatives into the comparison view and review final results. | > **Tip:** Sort the comparison table by **Conversion Rate** rather than clicks alone — a creative with fewer clicks but a higher CVR is often more valuable than a high-click creative that fails to convert. # Creative Library Source: https://docs.pingtree.com/documentation/creative-library/creative-library Browse, upload, organize, and manage all creative assets across your campaigns — with filtering, tagging, templates, and bulk actions. The **Creative Library** is the central repository for all creative assets in Pingtree. From here you can upload new creatives, organize existing ones, assign them to campaigns, and manage the templates your team uses to produce creative content at scale. Creative library grid view with filters and upload options *** ## Browsing and Filtering The library displays all creatives in a searchable, filterable grid or list view. ### Search and Filters | Filter | Options | | -------------- | ------------------------------------------------------------------------------------- | | **Search** | Search by creative name or unique ID. | | **Type** | Text, Image, Video. | | **Status** | New, Approved, Not Approved, In Progress, In Design Review, In Production, In Active. | | **Campaign** | Filter to creatives assigned to a specific campaign. | | **Tags** | Filter by one or more custom tags. | | **Date Range** | Filter by upload date or last-modified date. | You can combine multiple filters simultaneously to build a precise view of your library — for example, all *Image* creatives tagged *Q2 Campaign* that are currently *In Design Review*. > **Tip:** Save your most-used filter combinations as custom views so you can return to them with one click. *** ## Uploading New Creatives ### Images and Videos Drag and drop image or video files directly onto the upload area, or click **Upload** to browse your file system. * **Supported image formats:** JPG, PNG, GIF, WebP, SVG. * **Supported video formats:** MP4, MOV, AVI, WebM. * Multiple files can be uploaded in a single batch. ### Text Creatives For text-based creatives (headlines, ad copy, scripts), click **Add Text Creative** and enter the content directly in the editor. Text creatives do not require a file upload. ### After Uploading Once a creative is uploaded: 1. It is automatically assigned a **unique creative ID** (e.g., `cr1042`). 2. Its status is set to **New**. 3. You can immediately add tags, assign it to a campaign, or leave it unassigned for later. > **Tip:** Add descriptive tags at upload time — it is much faster than tagging creatives retroactively once your library grows. *** ## Creative Details Each creative has its own detail view, accessible by clicking on it in the library. From here you can: * View the **original file** (dimensions, file size, format, upload date). * Edit the creative **name** and **tags**. * Review and update the creative **status**. * See which **campaigns** the creative is assigned to. * View the full **activity log** for that creative (status changes, reassignments, etc.). *** ## Assigning Creatives to Campaigns Creatives can be assigned to one or more campaigns directly from the library: 1. Open the creative detail view. 2. Click **Assign to Campaign**. 3. Select one or more campaigns from the dropdown. 4. Confirm the assignment. Alternatively, use the **bulk assign** action from the library grid to assign multiple creatives to a campaign at once. *** ## Creative Templates Templates let you save and reuse creative layouts so your team does not start from scratch on every new creative. ### Creating a Template 1. Navigate to the **Templates** tab within the Creative Library. 2. Click **New Template**. 3. Provide a template name, a preview image, and any associated media channels. 4. Add tags to make the template searchable. 5. Save the template. ### Using a Template When uploading a new creative, select **Use Template** and choose from your saved templates. The template's layout and settings are pre-applied, and you supply the specific assets or copy. ### Template Management | Action | Description | | ------------- | ---------------------------------------------------------------------------- | | **Edit** | Update the template name, preview image, tags, or associated media channels. | | **Duplicate** | Create a copy of an existing template as a starting point for a variation. | | **Delete** | Remove templates that are no longer in use. | | **Tag** | Add or update tags for easier discovery. | *** ## Organizing with Folders Group related creatives into folders to keep your library tidy, especially when managing creatives across many campaigns or time periods. * Create folders from the library sidebar. * Drag and drop creatives into folders. * Folders can be nested for hierarchical organization. *** ## Bulk Actions Select multiple creatives using the checkboxes in the library grid to perform bulk actions: | Action | Description | | ---------------------- | ------------------------------------------------------- | | **Approve** | Move selected creatives to *Approved* status. | | **Reject** | Move selected creatives to *Not Approved* status. | | **Mark In Progress** | Set selected creatives to *In Progress*. | | **Assign to Campaign** | Assign all selected creatives to a campaign. | | **Add Tags** | Apply one or more tags to all selected creatives. | | **Delete** | Permanently remove selected creatives from the library. | > **Tip:** Use bulk approval after a design review session to update many creatives at once rather than opening each one individually. # Creative Overview Source: https://docs.pingtree.com/documentation/creative-library/creative-overview A high-level dashboard summarizing all creative assets across your campaigns, with status and type breakdowns, performance metrics, and recent activity. The **Creative Overview** is the central dashboard for your creative library. It gives you an at-a-glance summary of every creative asset across all campaigns — helping you track progress through the production pipeline, spot bottlenecks, and assess overall creative performance without digging into individual campaigns. Creative Overview dashboard with status cards, connected media channels, and creative metrics *** ## Status Breakdown Every creative in Pingtree is assigned one of the following statuses as it moves through the production workflow. | Status | Description | | -------------------- | ---------------------------------------------------------------- | | **New** | Creative has been uploaded but not yet reviewed. | | **In Design Review** | Creative is being evaluated by the design team. | | **In Production** | Creative has been approved for production and is being prepared. | | **Approved** | Creative has passed review and is ready for deployment. | | **Not Approved** | Creative did not pass review and requires rework or replacement. | | **In Active** | Creative is currently live and serving in a campaign. | The overview dashboard displays a count for each status, so you can immediately see how many creatives are waiting on review, stuck in production, or ready to go live. *** ## Type Breakdown Creatives are grouped by their media type: | Type | Description | | --------- | ------------------------------------------------------------------- | | **Image** | Static image assets such as banner ads or display creatives. | | **Video** | Video creatives used across digital ad placements. | | **Text** | Copy-only creatives such as ad headlines, descriptions, or scripts. | The type breakdown lets you see the composition of your creative library at a glance and helps identify gaps — for example, if a campaign relies heavily on image creatives but lacks video alternatives. *** ## Quick Filters and Search The overview includes filters so you can narrow down the creatives shown without leaving the dashboard: * **Search by name or ID** — find a specific creative instantly using its name or unique ID. * **Filter by status** — isolate creatives at a particular workflow stage. * **Filter by type** — view only image, video, or text creatives. * **Filter by campaign** — focus on creatives assigned to a specific campaign. > **Tip:** Use the status filter combined with a campaign filter to quickly find all creatives awaiting approval for a specific campaign before a launch deadline. *** ## Performance Summary The overview surfaces aggregated performance metrics across all creatives, giving you a rolled-up view of creative effectiveness: * **Total impressions** across all active creatives. * **Total clicks** and overall click-through rate (CTR). * **Conversion contributions** — how many conversions can be attributed to creative-driven traffic. * **Top performing creative** — the single creative driving the highest engagement. These metrics update in real time based on the date range selected at the top of the page. *** ## Recent Uploads and Activity The **Recent Activity** feed at the bottom of the overview shows the latest changes across your creative library: * Newly uploaded creatives. * Status changes (e.g., a creative moved from *In Design Review* to *Approved*). * Creatives assigned to or removed from campaigns. * Bulk actions performed (e.g., a batch of creatives marked as *Approved*). Each activity entry shows the creative name, the action taken, the user who performed it, and a timestamp. > **Tip:** Check the Recent Activity feed at the start of each day to stay on top of creative approvals, rejections, and new uploads without needing to monitor individual campaigns. # Creative Process Kanban Source: https://docs.pingtree.com/documentation/creative-library/process-kanban A visual Kanban board for tracking creatives through the production workflow — from upload to active deployment — with drag-and-drop stage management. The **Creative Process Kanban** provides a visual, board-style view of every creative in your library, organised by its current workflow stage. It is the fastest way to see where creatives are in the production pipeline, identify bottlenecks, and take action without navigating into individual creative records. Creative process kanban board with workflow stages *** ## Kanban Board Layout The board displays creatives as cards arranged in columns. Each column represents a stage in the creative production workflow. ### Default Workflow Stages | Stage | Description | | -------------------- | ------------------------------------------------------------------------ | | **New** | Creative has been uploaded but review has not yet started. | | **In Design Review** | Creative is under active evaluation by the design team. | | **In Production** | Creative has cleared design review and is being prepared for deployment. | | **Approved** | Creative has passed all review stages and is cleared for use. | | **Not Approved** | Creative did not pass review; requires rework or replacement. | | **Active** | Creative is currently live and serving in one or more campaigns. | Each card on the board shows the creative's name, unique ID, assigned campaign (if any), tags, and a thumbnail (for image and video creatives). *** ## Moving Creatives Between Stages Drag a creative card from one column and drop it into another to update its status instantly. There is no need to open the creative detail view for routine stage transitions. * Dragging a card updates the creative's status in real time. * All status changes are recorded in the creative's activity log with a timestamp and the user who made the change. > **Tip:** During a team stand-up or review session, use the Kanban board on a shared screen to walk through all in-progress creatives and move them forward collaboratively as a team. *** ## Filtering the Board Use the filters at the top of the board to focus on a specific subset of creatives: | Filter | Description | | ------------ | ------------------------------------------------------- | | **Campaign** | Show only creatives assigned to a selected campaign. | | **Assignee** | Filter by the team member responsible for the creative. | | **Tags** | Narrow the board to creatives with specific tags. | | **Type** | Show only image, video, or text creatives. | Filters can be combined. For example, you can view all *Image* creatives tagged *Summer Promo* that are assigned to a specific team member — giving you a precise slice of the pipeline without any noise. *** ## Bulk Status Updates from the Board You do not have to drag cards one at a time. Select multiple creative cards using the checkboxes that appear on hover, then use the **Bulk Update** toolbar to move them all to a new stage at once. Common bulk actions from the board: * Move a batch of creatives from *In Design Review* to *Approved* after a review session. * Mark a group of rejected creatives as *New* to restart the review cycle. * Move a set of approved creatives to *Active* when a campaign launches. *** ## Tracking the Creative Lifecycle The Kanban board makes the full creative lifecycle visible at a glance: ``` Upload → New → In Design Review → In Production → Approved → Active ↓ Not Approved ``` * Creatives that are **Not Approved** can be moved back to **New** once they have been revised and re-uploaded. * Creatives that move to **Active** remain visible on the board so you can monitor your live creative inventory. *** ## Best Practices for Teams The Kanban board is especially valuable for teams managing high volumes of creative production across multiple campaigns running simultaneously. | Scenario | Recommendation | | -------------------------------- | --------------------------------------------------------------------------------------------- | | Large creative backlog in *New* | Assign team members to specific cards using the assignee field to distribute review workload. | | Bottleneck in *In Design Review* | Use the assignee filter to identify who has the most cards and rebalance. | | Campaign launch approaching | Filter by campaign and check that all required creatives have reached *Approved* or *Active*. | | Post-campaign cleanup | Filter by campaign and bulk-move all *Active* creatives to a suitable archived status. | > **Tip:** Add tags such as `priority`, `urgent`, or `hold` to creatives so they stand out on the board and communicate context to your team without requiring verbal check-ins. # Dashboard Source: https://docs.pingtree.com/documentation/dashboard/dashboard-overview The Pingtree Dashboard is your platform's home base — a real-time command center showing aggregated campaign performance across all your traffic sources, buyers, and funnels. ## Overview The Dashboard is the first page you land on after logging in to Pingtree. It gives you an at-a-glance view of how your campaigns are performing across clicks, form submissions, conversions, revenue, cost, and profit — all in one place. The Dashboard is designed to surface the most important information immediately, with filtering and drill-down tools available to go deeper when you need to. Pingtree dashboard showing KPI cards, performance graphs, and campaign filters *** ## KPI Summary Cards At the top of the Dashboard you will find a row of metric cards that summarize your campaign performance for the selected date range. | Metric | Description | | ------------------ | ---------------------------------------------------------- | | **Clicks** | Total number of click events recorded across all campaigns | | **Forms** | Total form submissions received | | **Accepted Leads** | Leads that were accepted into the distribution pipeline | | **Cost** | Total marketing spend (payout to sources) | | **Revenue** | Total advertiser-side revenue generated | | **Profit** | Revenue minus cost | | **Margin** | Profit expressed as a percentage of revenue | *** ## Date Range Filtering Use the date range picker in the top-right of the Dashboard to control the time window for all metrics and charts. Pre-built ranges include: * Today * Yesterday * Last 7 Days (default) * Last 30 Days * This Month * Last Month * Custom range All charts, KPI cards, and tables update instantly when you change the date range. *** ## Lead Filters Click the **Lead Filters** button to open the filter panel. You can narrow down all Dashboard data by: * **Campaign** — Filter to a specific offer campaign * **Buyer** — Show data for one or more buyers/endpoints * **Source** — Filter by a specific traffic source * **Media Type** — Filter by traffic channel (see below) ### Media Type Quick Filters Below the main KPI cards, a row of media type buttons lets you instantly segment the Dashboard by traffic channel: | Button | What it Shows | | ---------------------- | -------------------------------------------------------- | | **All Sources** | Combined data across every source | | **Google** | Traffic from Google Search campaigns | | **Meta Ads** | Traffic from Meta (Facebook/Instagram) campaigns | | **Marketing Partners** | Affiliate and partner-driven traffic | | **Custom Sources** | Any custom or direct traffic sources you have configured | Combining media type buttons with the date range picker and Lead Filters gives you a precise view — for example, "Google traffic for Campaign X over the last 30 days." *** ## Saved Filters You can save any combination of filters as a named preset so you can reuse it without reconfiguring each time. Set the date range, campaign, buyer, source, and media type filters to the combination you want to save. Click **Save Filter**, give the preset a name, and confirm. The preset is saved to your user account. Open the filter panel and select the saved preset from the list. All filters are applied instantly. Saved filters are stored per user and are available across sessions. *** ## Click-to-Conversion Graph The **Clicks to Conversions** line chart is the primary trend graph on the Dashboard. It plots: * **Clicks** — raw traffic volume over the selected period * **Conversions** — accepted leads or sales attributed to that traffic Use this chart to identify traffic spikes, conversion rate drops, and day-of-week patterns at a glance. *** ## Cost and Spend Activity The **Cost and Spend Activity** section sits below the click-to-conversion chart and shows your financial performance trend over the selected date range. Summary metrics displayed alongside the chart: | Metric | Description | | ----------- | --------------------------------- | | **Revenue** | Total income from buyers | | **Cost** | Total payout to sources | | **Profit** | Revenue minus cost | | **Margin** | Profit as a percentage of revenue | The chart uses a stock-style area chart to visualize revenue and cost trends over time, making it easy to spot periods where margins compressed or expanded. Click **View Detailed More In Reporting Hub** to jump directly to the Reporting Hub for a deeper financial breakdown. *** ## Lead Distribution Panel The Lead Distribution section shows how leads are moving through your distribution pipeline for the selected campaign and date range: | Metric | Description | | -------------------- | --------------------------------------------------------------- | | **Leads Attempted** | Total leads sent to distribution endpoints | | **Leads Accepted** | Leads successfully accepted by at least one buyer | | **Active Endpoints** | Number of live distribution endpoints currently receiving leads | A trend indicator (up/down arrow with percentage) shows whether today's attempted and accepted lead volumes are above or below yesterday's baseline. *** ## Funnel Performance Chart The Dashboard includes a **Funnel Builder - Funnels** table that lists your active funnels alongside key performance data. From here you can quickly navigate to any individual funnel's dashboard without leaving the overview. *** ## Source-Level and Buyer-Level Breakdowns Below the main charts, the Dashboard provides tabular breakdowns of performance by: * **Source** — shows clicks, forms, accepted leads, cost, and conversion rate per traffic source * **Buyer** — shows accepted leads, revenue, and endpoint-level acceptance rates per buyer These tables update with the same filters applied to the rest of the Dashboard. *** ## Dashboard Tabs The Dashboard has multiple tabs accessible from the top navigation bar: | Tab | Description | | ---------------------- | ---------------------------------------------------- | | **Campaign Overview** | The main performance view described in this document | | **Campaign Analytics** | Deeper analytics view for individual campaigns | | **Request Management** | Manage support tickets and internal requests | | **Account Notation** | Team notes and account-level annotations | *** ## First-Time User Experience If your account does not yet have any campaigns, the Dashboard will display a **Campaign Invite Modal** when you first log in. This modal guides you through joining an existing campaign or creating your first campaign so you can start seeing data on the Dashboard immediately. *** ## Refreshing the Dashboard Click the **refresh icon** (top-right of the filter bar) to manually reload all Dashboard data without changing any of your current filters. This is useful when monitoring live traffic without wanting to change the date range. # Attribute List Source: https://docs.pingtree.com/documentation/database/attribute-list Create and manage metadata attributes for lead segmentation, filtering, and reporting within your database sources. ## What are Attributes? **Attributes** are metadata tags that can be applied to leads stored in a database source. They are used to segment, filter, and categorize leads without altering the core lead data itself. Unlike custom fields — which capture data points submitted with the lead — attributes are labels applied after the lead is stored. They provide a flexible layer of classification that supports reporting, targeted exports, and workflow automation. Attribute List with attribute names, data types, and actions **Example use cases:** * Tag leads as "High Intent" or "Low Intent" based on engagement signals. * Mark leads that came from a specific partner or promotion. * Flag leads that need manual review or follow-up. *** ## Attribute Structure Attributes are organized into a two-level hierarchy: | Level | Description | | ---------------- | ------------------------------------------------------------------------------------------------------------- | | **Parent Label** | A group or category that organizes related attributes (e.g., "Lead Quality", "Source Type", "Review Status"). | | **Attribute** | An individual tag within a parent label (e.g., "High Intent", "Low Intent" within "Lead Quality"). | This structure keeps your attribute list organized and makes filtering intuitive when you have a large number of tags. *** ## Creating a Parent Label Parent labels group your attributes into logical categories. To create a parent label: 1. Navigate to the **Attribute List** tab within your database source. 2. Click **Add Parent Label**. 3. Enter a name for the label group (e.g., "Lead Quality"). 4. Click **Save**. *** ## Creating an Attribute Once you have a parent label, you can add attributes beneath it. To create an attribute: 1. Open the parent label you want to add to. 2. Click **Add Attribute**. 3. Fill in the attribute details: | Field | Description | | ------------------- | ------------------------------------------------------------------------ | | **Attribute Name** | The display name of the tag (e.g., "High Intent"). | | **Parent Label** | The group this attribute belongs to. | | **Selection Group** | Optional — enables multi-value selection for this attribute (see below). | | **Description** | An optional note describing when this attribute should be applied. | 4. Click **Save**. *** ## Selection Groups A **Selection Group** is used when a single parent label can have multiple attributes applied to the same lead simultaneously. This is useful for multi-value classification scenarios. **Example:** * Parent Label: "Interest Areas" * Attributes: "Solar", "Roofing", "HVAC", "Windows" * A single lead could be tagged with both "Solar" and "Roofing" if the selection group allows multi-select. Without a selection group, only one attribute from a parent label can be applied to a lead at a time (mutually exclusive). *** ## Assigning Attributes to Leads ### Manual Assignment 1. Open a lead from the **Source Leads** view. 2. Scroll to the **Attributes** section in the lead detail panel. 3. Click **Add Attribute**. 4. Select the parent label, then choose the attribute to apply. 5. Save the lead. ### Automated Assignment Attributes can also be assigned automatically via: * **Routing Rules**: Apply an attribute when a lead is routed to a specific buyer or destination. * **Import Rules**: Assign an attribute to all leads within a specific CSV import file. * **API**: Pass attribute assignments in the lead ingestion API payload. > **Tip:** Automate attribute assignment during import by pre-tagging all leads in an uploaded file with a source-specific attribute. This makes it easy to filter and report on leads by their origin file later. *** ## Using Attributes for Filtering Attributes integrate with the **Source Leads** search and filter system. You can filter the leads table by one or more attribute values to narrow down your view: 1. Open the **Source Leads** tab. 2. Click **Filter**. 3. Select **Attribute** from the filter options. 4. Choose the parent label and specific attribute value. 5. The table updates to show only leads with that attribute. Attribute filters can be combined with other filters (date range, status, email) for precise lead segmentation. *** ## Using Attributes in Reports and Exports When exporting leads to CSV, you can include attribute columns in the output. Each parent label becomes a column, and the assigned attribute value populates the row. In pivot reports and analytics, attributes can be used as dimensions — letting you break down performance metrics (e.g., conversion rate, revenue) by lead quality segment or source type. *** ## Managing and Editing Attributes * **Edit an attribute**: Click the edit icon next to any attribute to update its name, parent label, or description. * **Deactivate an attribute**: Toggle the attribute off to prevent it from being assigned to new leads. Existing assignments are retained. * **Delete an attribute**: Permanently remove the attribute. This will also remove it from any leads it was assigned to. > **Tip:** Before deleting an attribute, export a filtered list of all leads that carry that attribute so you have a record of the affected records. # Creative Importer Source: https://docs.pingtree.com/documentation/database/creative-importer Bulk-import creative assets into a database source via CSV, with column mapping, fuzzy matching, and import status tracking. ## Overview The **Creative Importer** allows you to upload a CSV file containing creative asset data — such as image URLs, ad copy, metadata, and identifiers — and bulk-import those records into a database source. Like the Data Importer for leads, the Creative Importer includes column mapping, fuzzy matching for near-duplicate creatives, and step-by-step progress tracking. Creative Importer with matched records, fuzzy matching, and upload button *** ## Before You Start Prepare your CSV file before beginning: * File format: `.csv` (comma-separated values). * Encoding: UTF-8. * The first row must be a header row with column names. * Asset URLs should be fully qualified (e.g., `https://cdn.example.com/creative-banner.jpg`). * Ensure consistent formatting for any date or numeric fields in the file. > **Tip:** Run a small test batch of 5–10 creatives first to verify your column mapping is correct before importing a full creative library. *** ## Step 1: Upload Your CSV File 1. Navigate to the **Creative Importer** tab within your database source. 2. Click **Upload CSV File**. 3. Select your file from your local machine or drag and drop it into the upload zone. 4. The system reads the file and extracts column headers for the mapping step. *** ## Step 2: Map CSV Columns to Creative Fields Align each column in your CSV with the corresponding creative field in Pingtree. | Column | Description | | ------------------ | ---------------------------------------------------------------- | | **CSV Column** | The header name from your file. | | **Sample Values** | A preview of values from that column to confirm correct mapping. | | **Creative Field** | The Pingtree creative field to map this column to. | **Standard creative fields available for mapping:** | Field | Description | | ------------------- | ------------------------------------------------------------- | | **Creative Name** | The display name or identifier for the creative. | | **Asset URL** | The URL of the creative asset (image, video, or document). | | **Ad Copy** | The headline or body text associated with the creative. | | **Creative Type** | The media type: `image`, `video`, or `text`. | | **Campaign ID** | The campaign this creative is associated with. | | **Status** | Initial status to assign (e.g., `new`, `approved`). | | **Tags** | Comma-separated tag values for categorization. | | **Custom Metadata** | Any additional metadata fields defined for your organization. | Mark any columns not needed as **Ignore** to skip them during import. > **Tip:** If your CSV column headers match the Pingtree field keys exactly, the system will auto-suggest mappings. Always review these suggestions before proceeding. *** ## Step 3: Review and Start Import Review the mapping summary before starting: | Summary Item | Description | | ------------------- | ----------------------------------------------- | | **Total Rows** | Total number of creative records in the CSV. | | **Mapped Fields** | All columns and their assigned creative fields. | | **Ignored Columns** | Columns that will be skipped. | Click **Start Import** to begin processing. *** ## How Creative Records Are Processed For each row, the importer: 1. **Validates** the row against required fields and format rules. 2. **Checks for exact matches** against existing creative records in the source. 3. **Checks for fuzzy matches** — creatives similar to existing records. 4. **Creates or updates** the record based on the outcome: | Outcome | Description | | ------------------------ | -------------------------------------------------------------------------------------------- | | **New Creative Created** | No match found — a new creative record is created. | | **Exact Match** | An identical creative already exists — the record is updated with any new data from the CSV. | | **Fuzzy Match** | A similar creative was found — held for manual review. | | **Validation Failed** | The row has missing or invalid data — logged as a failed row. | *** ## Fuzzy Matching for Creatives The fuzzy matching engine compares incoming creative records against existing ones using key identifiers such as the creative name, asset URL, and ad copy. Records that are similar but not identical are flagged as fuzzy matches rather than being merged automatically. To review fuzzy matches: 1. Go to the **Imported Data** tab after the import completes. 2. Open the import file and click **Review Fuzzy Matches**. 3. For each pair, compare the incoming creative (left) with the existing record (right). 4. Choose an action: | Action | Description | | -------------- | --------------------------------------------------------------- | | **Merge** | Update the existing creative record with data from the CSV row. | | **Create New** | Add the incoming creative as a separate new record. | | **Reject** | Discard the incoming creative without storing it. | 5. Click **Confirm** to apply your decisions. > **Tip:** Fuzzy matches most commonly occur when the same creative has been re-exported and re-uploaded with minor naming changes. Review carefully to avoid creating duplicate assets in your library. *** ## Bulk-Approving Imported Creatives After a successful import, you can bulk-approve all newly imported creatives without reviewing each one individually: 1. Go to the **Creative Library** or the imported creatives list. 2. Select all creatives from the import using the **Select All** checkbox. 3. Click **Bulk Approve**. 4. Confirm the action. All selected creatives will move to **Approved** status and become available for campaign use. > **Tip:** Use bulk approval only when you have pre-validated the creatives externally (e.g., through an advertiser review process). For new or unverified creatives, review each record individually before approving. *** ## Viewing Import File Counts and Status The **Imported Data** tab shows a summary for each creative import file: | Count | Description | | ----------------- | ----------------------------------------------- | | **Total Rows** | All rows in the uploaded CSV. | | **New Creatives** | Rows that created new creative records. | | **Matched** | Rows that matched and updated existing records. | | **Fuzzy Matches** | Rows held for manual review. | | **Failed** | Rows with errors that could not be processed. | Import status follows the same lifecycle as lead imports: | Status | Description | | ------------------------- | -------------------------------------------------- | | **Pending** | File uploaded, waiting to be processed. | | **Processing** | Import is actively running. | | **Completed** | All rows processed successfully. | | **Completed with Errors** | Processing finished but some rows failed. | | **Failed** | Import could not complete due to a critical error. | *** ## Re-Importing Failed Rows If some rows fail: 1. Open the import file in **Imported Data**. 2. Click **Download Failed Rows** to get a CSV with only the failed records and their error reasons. 3. Fix the data issues. 4. Re-upload the corrected file through the Creative Importer. Common failure reasons include missing asset URLs, unrecognized creative type values, and malformed metadata fields. # Custom Fields Source: https://docs.pingtree.com/documentation/database/custom-fields Extend the default lead schema by adding custom fields to capture and track additional data points within your database source. ## Overview Pingtree includes a standard set of lead fields out of the box — name, email, phone, address, and other common identifiers. **Custom Fields** let you go beyond these defaults by defining additional data points specific to your vertical, advertiser requirements, or internal workflows. Custom fields can be used for data capture, import mapping, export filtering, and campaign-level field management. Custom Fields list with field names, data types, and status toggles *** ## Default vs. Custom Fields | Type | Description | | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------- | | **System Fields** | Built-in fields provided by Pingtree (e.g., `first_name`, `email`, `phone`, `state`, `zip`). These are available to every source by default. | | **Organization Custom Fields** | Fields created by your organization that are available across all database sources and campaigns. | | **SubID Fields** | Special tracking fields used to capture affiliate sub-parameters for attribution and reporting. | *** ## Supported Field Types When creating a custom field, choose the data type that matches the values you expect to collect: | Field Type | Description | Example Values | | ------------ | ---------------------------------------- | -------------------------------------- | | **Text** | Free-form string input. | `"Homeowner"`, `"Interested in solar"` | | **Number** | Numeric values, integers or decimals. | `42`, `3.14` | | **Date** | Date values in standard formats. | `2025-06-15` | | **Dropdown** | A predefined list of selectable options. | `"Yes"`, `"No"`, `"Maybe"` | | **Boolean** | True or false values. | `true`, `false` | *** ## Creating a Custom Field 1. Navigate to the **Custom Fields** tab within your database source (or via the organization-level field settings). 2. Click **Add Custom Field**. 3. Fill in the field details: | Setting | Description | | -------------------- | -------------------------------------------------------------------------------------------------------- | | **Field Name** | The display label for this field (e.g., "Annual Income"). | | **Field Key** | The API key used to submit or retrieve this field (e.g., `annual_income`). Auto-generated from the name. | | **Field Type** | Select the data type: Text, Number, Date, Dropdown, or Boolean. | | **Required** | Toggle on to make this field mandatory for lead submission. | | **Dropdown Options** | If the field type is Dropdown, define the list of allowed values. | 4. Click **Save**. > **Tip:** Field keys should be lowercase and use underscores instead of spaces. They are used in API payloads and CSV column headers, so consistency matters. *** ## Marking Fields as Required or Optional Any field — system or custom — can be set as required for a specific database source. When a lead submission is missing a required field, it is rejected at ingestion time with a clear error message indicating which field is absent. To update a field's required status: 1. Go to the **Custom Fields** tab. 2. Find the field you want to update. 3. Toggle the **Required** switch on or off. 4. Save the change. *** ## Enabling and Disabling Fields per Campaign Custom fields can be enabled or disabled at the campaign level. This lets you collect different data points depending on which campaign a lead flows through. To manage field availability per campaign: 1. Open the campaign linked to your database source. 2. Navigate to **Settings > Field Management**. 3. Toggle each custom field on or off for that campaign. > **Tip:** Disabling a field at the campaign level does not delete the field or its data — it simply stops the field from appearing in the campaign's form API spec and submission validation. *** ## Click Script Fields Click Script fields are a special category of custom field that capture data points via JavaScript tracking embedded on your landing pages or thank-you pages. These fields are populated client-side when a visitor interacts with your funnel, and the values are passed along with the lead submission. Common uses include: * Capturing the click ID from an ad network. * Recording the time spent on a page before conversion. * Storing the referring domain or UTM parameters. To set up a click script field: 1. Create the custom field and mark it as a **Click Script** field type. 2. Configure the JavaScript variable or DOM element selector the script should read from. 3. The click script will automatically populate the field value at submission time. *** ## SubID Fields SubID fields are dedicated tracking parameters used by affiliate traffic sources (Marketing Partners) to pass sub-account or campaign-level identifiers alongside a lead. | SubID Field | Description | | ---------------- | ------------------------------------------------------------------------------------------- | | **SubID 1–5** | Standard affiliate sub-parameters for tracking traffic split by ad, placement, or creative. | | **Custom SubID** | Organization-defined sub-parameter keys for more granular tracking. | SubID values appear in the SubID Report and can be used to analyze performance at the sub-publisher level. *** ## Mapping Custom Fields for Import and Export When uploading leads via CSV, the column headers in your file must match either the **field key** of a system field or the **field key** of a custom field. During the import step, Pingtree's column mapper shows all available system and custom fields so you can align your CSV columns correctly. For exports, all custom fields are included in the exported CSV alongside system fields. You can filter which fields appear in the export from the export settings. See [Data Importer](/documentation/database/data-importer) for the step-by-step import process. # Data Importer Source: https://docs.pingtree.com/documentation/database/data-importer Upload CSV files to bulk-import leads into a database source, with column mapping, fuzzy match review, and import progress tracking. ## Overview The **Data Importer** allows you to upload CSV files and bulk-import leads into a database source. It supports column mapping, duplicate detection, fuzzy matching for near-duplicates, and step-by-step progress tracking — making it straightforward to bring large datasets into Pingtree without manual data entry. > **Video Walkthrough:** A step-by-step video guide for this feature is coming soon. Data importer CSV upload and field mapping interface *** ## Before You Start Make sure your CSV file is ready before beginning the import: * File format: `.csv` (comma-separated values). * Encoding: UTF-8. * The first row must be a header row with column names. * Phone numbers should include only digits (no dashes, parentheses, or spaces). * Date fields should use a consistent format throughout the file (e.g., `MM/DD/YYYY`). > **Tip:** Start with a small test file of 10–20 rows before importing a full dataset. This lets you validate your column mapping and catch data issues early. *** ## Step 1: Upload Your CSV File 1. Navigate to the **Data Importer** tab within your database source. 2. Click **Upload CSV File**. 3. Select your file from your local machine (or drag and drop it into the upload zone). 4. The system reads the file and extracts the column headers for mapping. Once uploaded, the file moves to the **Column Mapping** step automatically. *** ## Step 2: Map CSV Columns to Pingtree Fields In this step, you align each column in your CSV file with the corresponding Pingtree field. The mapping interface shows: | Column | Description | | ------------------ | --------------------------------------------------------------------------------------------------- | | **CSV Column** | The header name from your uploaded file. | | **Sample Values** | A preview of the first few values from that column to help confirm you are mapping the right field. | | **Pingtree Field** | A dropdown to select which Pingtree system or custom field this column maps to. | **Rules for mapping:** * Every column must be mapped to a Pingtree field, or explicitly marked as **Ignore** to skip it. * Required fields (as configured on the source) must be mapped before the import can proceed. * Custom fields you have defined on the source will appear in the Pingtree Field dropdown alongside system fields. > **Tip:** If your CSV uses field names that match Pingtree's field keys exactly (e.g., `email`, `phone`, `first_name`), the system will auto-suggest the correct mapping. Always review auto-suggestions before proceeding. *** ## Step 3: Review Mapping and Start Import Before the import begins, review a summary of your mapping: | Summary Item | Description | | ------------------- | --------------------------------------------------------------- | | **Total Rows** | Number of data rows detected in the CSV (excluding the header). | | **Mapped Fields** | List of all CSV columns and their assigned Pingtree fields. | | **Ignored Columns** | Columns that will be skipped. | | **Required Fields** | Confirmation that all required fields have been mapped. | Once satisfied: 1. Click **Start Import**. 2. The system queues the import job and begins processing rows. *** ## How Leads Are Processed For each row in the CSV, the importer: 1. **Validates** the row against required fields and data type rules. 2. **Checks for exact duplicates** using the source's configured duplicate field (e.g., email or phone). 3. **Checks for fuzzy matches** — near-duplicate leads that are similar but not identical to existing records. 4. **Creates or updates** the lead record based on the outcome: | Outcome | Description | | --------------------- | ---------------------------------------------------------------------------------- | | **New Lead Created** | No match found — the row is added as a new lead. | | **Exact Duplicate** | A lead with the same duplicate field value already exists — the row is skipped. | | **Fuzzy Match** | A similar lead was found — held for manual review before being merged or rejected. | | **Validation Failed** | The row is missing required fields or has invalid data — logged as a failed row. | *** ## Fuzzy Matching During Import Fuzzy matching identifies leads that are similar to existing records but not exact matches. The system compares key identifiers (name, email, phone) using similarity scoring. When a fuzzy match is detected, the lead is held in a **pending** state and appears in the **Fuzzy Matches** queue within the [Imported Data](/documentation/database/imported-data) view. For each fuzzy match, you can: * **Merge**: Combine the incoming data with the existing record. * **Create New**: Add the incoming lead as a separate record. * **Reject**: Discard the incoming lead. > **Tip:** Resolve fuzzy matches soon after an import completes. Unresolved fuzzy matches are not counted in the source's total lead count until you take action. *** ## Tracking Import Progress After starting the import, you can monitor its progress from the **Imported Data** tab: | Statistic | Description | | ----------------- | ----------------------------------------------- | | **Processed** | Number of rows completed so far. | | **New Leads** | Rows that resulted in new lead records. | | **Matched** | Rows that matched and updated existing records. | | **Fuzzy Matches** | Rows held for review. | | **Duplicates** | Rows skipped due to exact duplicate detection. | | **Failed** | Rows that could not be processed. | A progress bar updates in real time as rows are processed. *** ## Handling Failed Rows Rows that fail validation are logged with a reason code. After the import completes: 1. Go to **Imported Data** and open the import file. 2. Click **Download Failed Rows** to get a CSV of only the rows that errored. 3. The file includes an `error_reason` column describing why each row failed. 4. Fix the issues in your data. 5. Re-upload the corrected file as a new import. Common failure reasons: | Reason | Fix | | ---------------------- | ------------------------------------------------------------ | | Missing required field | Ensure the column exists in the CSV and is mapped correctly. | | Invalid email format | Validate and clean email addresses before upload. | | Invalid phone format | Strip non-numeric characters from phone numbers. | | Invalid date format | Standardize date values to the expected format. | *** ## Re-Importing Data You can re-import a file at any time by uploading it again through the Data Importer. The duplicate detection settings of the source will apply, so exact duplicates from a previous import will be skipped automatically. Use re-imports to: * Load corrected rows after fixing validation errors. * Refresh data for records that have changed since the original upload. * Top up a source with new leads added to the same list. # Database Sources Source: https://docs.pingtree.com/documentation/database/database-source Centralized lead storage containers for collecting, organizing, and distributing leads within Pingtree. ## What is a Database Source? A **Database Source** is a centralized lead storage container within Pingtree. It acts as a structured repository that holds leads collected from various channels — whether submitted via API, uploaded via CSV, or captured through campaign forms. Each database source is independent, with its own API key, duplicate rules, required fields, and linked campaigns. You can think of it as a dedicated lead database scoped to a specific use case, product, or advertiser. Database sources list with status indicators *** ## Key Capabilities | Capability | Description | | ----------------------- | -------------------------------------------------------------------- | | **Lead Storage** | Store and organize leads in a structured, queryable format. | | **API Ingestion** | Each source has a unique API key for programmatic lead submission. | | **Duplicate Detection** | Prevent duplicate leads based on email, phone, or a custom field. | | **Required Fields** | Enforce which fields must be present before a lead is accepted. | | **Campaign Linking** | Connect a database source to an offer campaign for distribution. | | **Advanced Search** | Query leads using MongoDB filters or Elasticsearch full-text search. | | **Post-Out** | Forward stored leads to external endpoints automatically. | *** ## Creating a Database Source 1. Navigate to **System Database** in the left sidebar. 2. Click **Database Sources**. 3. Click the **Create Database Source** button. 4. Fill in the source details: | Field | Description | | -------------- | ----------------------------------------------------------------------- | | **Name** | A descriptive label for this source (e.g., "Home Insurance Leads Q1"). | | **Slug** | Auto-generated URL-friendly identifier based on the name. | | **Advertiser** | Optionally link this source to a specific advertiser account. | | **Campaign** | Link to an offer campaign to enable lead distribution from this source. | | **Is Active** | Toggle the source on or off. Inactive sources do not accept new leads. | 5. Click **Save** to create the source. > **Tip:** Use descriptive names that include the vertical, date range, or advertiser — this makes it much easier to manage multiple sources across your organization. *** ## Configuring Duplicate Checking Duplicate checking prevents the same lead from being stored more than once in a source. Configure this under the source's settings: | Setting | Description | | ------------------------ | -------------------------------------------------------------------------------------- | | **Check Duplicate** | Enable or disable duplicate detection for this source. | | **Duplicate Field Name** | The field used to identify duplicates (e.g., `email`, `phone`, or a custom field key). | When a lead is submitted and its duplicate field value already exists in the source, the incoming lead is rejected and flagged as a duplicate. > **Tip:** Using `email` as the duplicate field is the most common choice. If your leads may share emails (e.g., family plans), consider using `phone` or a composite custom field instead. *** ## Setting Required Fields Required fields define which data points must be present in a lead submission for it to be accepted. Any lead missing a required field is rejected at ingestion time. To configure required fields: 1. Open the database source. 2. Go to the **Settings** or **Field Configuration** section. 3. Mark each field as **Required** or **Optional**. *** ## Linking to a Campaign A database source can be linked to an offer campaign. This allows leads stored in the source to be distributed through that campaign's routing and buyer logic. To link a campaign: 1. Open the database source settings. 2. Select the target **Offer Campaign** from the dropdown. 3. Save your changes. > **Tip:** Linking a campaign enables the full distribution pipeline — including ping/post, pingtree routing, and endpoint posting — directly from your stored leads. *** ## Activating and Deactivating a Source * **Active**: The source accepts new leads via API and CSV import. * **Inactive**: The source is paused. Existing leads are retained but no new leads are accepted. Toggle the **Is Active** switch on the source settings page to change the state. *** ## Source Statistics Each database source displays a summary of its lead data: | Statistic | Description | | ------------------- | ---------------------------------------------------- | | **Total Leads** | The total number of leads stored in this source. | | **Active Leads** | Leads currently in an active or available state. | | **Duplicate Count** | Number of leads rejected due to duplicate detection. | | **Import Count** | Leads ingested via CSV file upload. | | **API Count** | Leads submitted programmatically via the source API. | *** ## Advanced Search Pingtree supports two search modes for querying leads within a database source: ### MongoDB-Based Search Use structured field filters to find leads by any stored field value, date range, or status. This is the default search interface and works well for most use cases. ### Elasticsearch Search For large datasets or full-text search requirements, Elasticsearch-powered search provides faster queries and fuzzy matching across all lead fields. > **Tip:** Elasticsearch search is particularly useful when you need to find leads by partial values (e.g., partial email domains or approximate name matches) across millions of records. *** ## API Key Management Every database source is assigned a unique API key at creation. This key is used to authenticate lead submissions and fetch requests. * View the API key from the **Source API Help** tab within the source. * If a key is compromised, regenerate it from the API settings. All future requests must use the new key. See [Source API Reference](/documentation/database/source-api-help) for full API documentation. # Exported Files Source: https://docs.pingtree.com/documentation/database/exported-files Request, track, and download CSV exports of lead data from any database source. ## Overview The **Exported Files** section provides a history of all CSV exports requested from a database source. Exports are processed asynchronously — you request the export, and the system notifies you when the file is ready for download. This approach allows large datasets to be exported without blocking your workflow. Exported Files list with file status and download button *** ## How Exports Work 1. Apply filters in the **Source Leads** view to scope the leads you want to export. 2. Click **Export** to submit the export request. 3. The system queues the export job and begins generating the CSV in the background. 4. Once complete, the exported file appears in the **Exported Files** list. 5. Download the file using the secure download link. > **Tip:** For large exports covering hundreds of thousands of leads, processing may take several minutes. You can continue working in Pingtree while the export runs in the background. *** ## Exported Files Table The exported files list shows all export requests for the current database source: | Column | Description | | ---------------- | -------------------------------------------------------------------------------------- | | **File Name** | The name of the generated CSV file, typically including the source name and timestamp. | | **Requested By** | The user who initiated the export. | | **Requested At** | Timestamp of when the export was submitted. | | **Completed At** | Timestamp of when the file was ready for download. | | **Status** | Current state of the export job. | | **Lead Count** | The number of leads included in the export. | | **Download** | A secure link to download the CSV file once ready. | *** ## Export Statuses | Status | Description | | -------------- | -------------------------------------------------------------------- | | **Pending** | The export request has been received and is waiting to be processed. | | **Processing** | The system is actively generating the CSV file. | | **Completed** | The file is ready and available for download. | | **Failed** | The export could not be completed. Contact support if this persists. | *** ## Filtering Leads Before Export You can control which leads are included in an export by applying filters before clicking **Export**: | Filter | Description | | ---------------- | ---------------------------------------------------------------- | | **Status** | Export only leads with a specific status (e.g., Active, Sold). | | **Date Range** | Limit the export to leads created within a specific time window. | | **Attribute** | Export leads tagged with a specific attribute. | | **Search Query** | Export only leads matching a name, email, or phone search. | The active filters at the time of the export request determine which leads are included. No leads outside the filtered scope will appear in the download. > **Tip:** Always confirm your filter selection before submitting the export. Once submitted, the export is based on the filter state at that moment — changing filters afterwards does not affect an already-queued export. *** ## Downloading Exported Files Exported files are available via secure, UUID-based download links. These links are: * **Unique per export**: Each file has its own link that cannot be guessed. * **Time-limited**: Download links may expire after a set period. Download the file promptly after it is ready. * **Access-controlled**: Only users with appropriate permissions for the database source can access the download link. To download a file: 1. Open the **Exported Files** tab within your database source. 2. Find the completed export in the list. 3. Click the **Download** button. 4. The CSV file will download to your local machine. *** ## Export File Format Exported CSV files include: * One row per lead. * All system fields (name, email, phone, address, status, etc.). * All custom fields defined for the database source. * Attribute values as additional columns. * Metadata columns: `created_at`, `updated_at`, `source_id`. The first row of the CSV contains column headers matching the field keys used in the Pingtree API. *** ## Export History The **Exported Files** tab retains a history of all exports, allowing you to: * Re-download a previously exported file (if the link has not expired). * Audit which users exported data and when. * Track how frequently data is being extracted from the source. > **Tip:** If you need to share exported data with an external partner, download the file first and share it directly. Do not share the Pingtree download URL, as it may be access-controlled to your session. # Imported Data Source: https://docs.pingtree.com/documentation/database/imported-data View and manage the history of CSV imports into a database source, including upload status and fuzzy match resolution. ## Overview The **Imported Data** section of a database source gives you a full history of every CSV file that has been uploaded into that source. You can track the status of each import, see how many leads were processed, and review or resolve any fuzzy matches identified during import. Imported Data view with import progress and file history *** ## Import History Table Each row in the import history table represents one upload. The table includes: | Column | Description | | ----------------- | -------------------------------------------------------------- | | **File Name** | The name of the uploaded CSV file. | | **Uploaded By** | The user who initiated the upload. | | **Uploaded At** | Timestamp of when the file was submitted. | | **Status** | Current processing state of the import. | | **Total Rows** | The total number of lead rows in the file. | | **Matched** | Leads that matched existing records in the source. | | **Unmatched** | Leads that did not match any existing record (created as new). | | **Fuzzy Matches** | Leads flagged as near-duplicates requiring manual review. | | **Failed** | Rows that could not be processed due to data errors. | *** ## Import Statuses | Status | Description | | ------------------------- | -------------------------------------------------------------------------------- | | **Pending** | The file has been uploaded and is waiting to be processed. | | **Processing** | The system is actively importing and matching leads from the file. | | **Completed** | All rows have been processed successfully. | | **Completed with Errors** | Processing finished, but some rows failed due to data issues. | | **Failed** | The import could not be completed (e.g., invalid file format or critical error). | > **Tip:** If an import shows a **Failed** status, check that your CSV uses UTF-8 encoding and that required column headers are present and correctly named. *** ## Fuzzy Matching During import, Pingtree's fuzzy matching engine scans each incoming lead and compares it against existing records in the source. When a lead is similar — but not an exact match — to an existing record, it is flagged as a **Fuzzy Match** rather than being automatically merged or rejected. ### How Fuzzy Matching Works The system compares key identifiers such as name, email, and phone number. If the similarity score for a lead exceeds a threshold but is not a 100% exact match, the lead is held for manual review. **Examples of fuzzy matches:** * `johnsmith@gmail.com` vs `john.smith@gmail.com` * `Jon Smith` vs `John Smith` * Phone numbers with and without country codes *** ## Reviewing Fuzzy Matches To resolve fuzzy matches for an import file: 1. Click the import file row to expand its details. 2. Click the **Review Fuzzy Matches** button. 3. For each fuzzy match, you will see: * The **incoming lead** from the CSV on the left. * The **existing lead** it was compared against on the right. * A similarity score indicating how closely they match. 4. Choose one of the following actions for each pair: | Action | Description | | -------------- | ---------------------------------------------------------- | | **Merge** | Combine the incoming lead's data with the existing record. | | **Create New** | Treat the incoming lead as a new, separate record. | | **Reject** | Discard the incoming lead without storing it. | 5. After reviewing all matches, click **Confirm** to apply your decisions. > **Tip:** Review fuzzy matches promptly after each import. Unresolved fuzzy matches remain in a pending state and are not counted as fully imported until resolved. *** ## Lead Counts per Import File Each import file displays a breakdown of its lead outcomes: | Count | Description | | ----------------- | ----------------------------------------------------------- | | **Matched** | Leads from the CSV that exactly matched an existing record. | | **Unmatched** | New leads that were created from the CSV. | | **Fuzzy Matched** | Leads flagged for manual review (pending until resolved). | | **Failed** | Rows with data errors that could not be processed. | The sum of Matched + Unmatched + Fuzzy Matched + Failed equals the Total Rows in the file. *** ## Re-Importing Failed Rows If some rows fail during an import: 1. Open the import file detail view. 2. Click **Download Failed Rows** to get a CSV of only the rows that errored. 3. Fix the data issues in the file. 4. Re-upload the corrected file using the [Data Importer](/documentation/database/data-importer). > **Tip:** The failed rows CSV includes an additional `error_reason` column that describes why each row was rejected, making it straightforward to identify and fix data quality issues. # Source API Reference Source: https://docs.pingtree.com/documentation/database/source-api-help API documentation for programmatic lead submission, retrieval, and suppression list management for a Pingtree database source. ## Overview Every database source in Pingtree exposes a set of HTTP API endpoints for programmatic interaction. You can submit new leads, fetch existing leads, manage suppression lists, and regenerate authentication tokens — all via REST API. The API documentation specific to your source is accessible directly from the **Source API Help** tab within any database source. *** ## Authentication All API requests require your database source's unique API key. Include it in the request header: ``` Authorization: Bearer YOUR_API_KEY ``` The API key is generated when the database source is created. Keep it secure — treat it like a password. > **Tip:** If you suspect an API key has been compromised, regenerate it immediately from the Source API Help tab. All future requests must use the new key. *** ## Endpoints ### Create Lead (Submit) Submit a new lead to the database source. | Property | Value | | ------------ | --------------------------------------- | | **Method** | `POST` | | **Endpoint** | `/api/v1/database-source/{slug}/create` | **Request Headers:** | Header | Value | | --------------- | --------------------- | | `Authorization` | `Bearer YOUR_API_KEY` | | `Content-Type` | `application/json` | **Request Body:** ```json theme={null} { "first_name": "Jane", "last_name": "Smith", "email": "jane.smith@example.com", "phone": "5551234567", "state": "CA", "zip": "90210" } ``` **Success Response (200):** ```json theme={null} { "success": true, "lead_id": "64f2a3b1c9e77d001234abcd", "message": "Lead created successfully." } ``` **Duplicate Response (200):** ```json theme={null} { "success": false, "reason": "duplicate", "message": "A lead with this email already exists in the source." } ``` **Validation Error Response (400):** ```json theme={null} { "success": false, "reason": "validation_error", "errors": { "email": "Email field is required.", "phone": "Phone must be a 10-digit number." } } ``` *** ### Fetch Leads (Retrieve) Retrieve leads from the database source with optional filtering. | Property | Value | | ------------ | -------------------------------------- | | **Method** | `GET` | | **Endpoint** | `/api/v1/database-source/{slug}/fetch` | **Query Parameters:** | Parameter | Type | Description | | ----------- | ------- | ------------------------------------------------------------------ | | `page` | Integer | Page number for pagination (default: 1). | | `limit` | Integer | Number of leads per page (default: 50, max: 500). | | `status` | String | Filter by lead status (`active`, `sold`, `duplicate`, `rejected`). | | `email` | String | Filter leads by email address. | | `phone` | String | Filter leads by phone number. | | `from_date` | String | Filter leads created on or after this date (`YYYY-MM-DD`). | | `to_date` | String | Filter leads created on or before this date (`YYYY-MM-DD`). | **Example Request:** ``` GET /api/v1/database-source/home-insurance-leads/fetch?status=active&from_date=2025-01-01&limit=100 Authorization: Bearer YOUR_API_KEY ``` **Success Response (200):** ```json theme={null} { "success": true, "total": 1432, "page": 1, "limit": 100, "leads": [ { "lead_id": "64f2a3b1c9e77d001234abcd", "first_name": "Jane", "last_name": "Smith", "email": "jane.smith@example.com", "phone": "5551234567", "status": "active", "created_at": "2025-03-15T10:22:00Z" } ] } ``` *** ## Token Regeneration If your API key needs to be rotated for security reasons: 1. Open the **Source API Help** tab within the database source. 2. Click **Regenerate API Key**. 3. Confirm the action. 4. Copy the new API key and update all systems that use it. > **Warning:** Regenerating the API key immediately invalidates the old key. Any system still using the old key will receive authentication errors until it is updated. *** ## Suppression List Management The suppression list prevents specific identifiers (email addresses, phone numbers) from being ingested into the source. Any lead submission matching a suppressed value is automatically rejected. ### Add to Suppression List | Property | Value | | ------------ | ------------------------------------------------ | | **Method** | `POST` | | **Endpoint** | `/api/v1/database-source/{slug}/suppression/add` | **Request Body:** ```json theme={null} { "type": "email", "value": "optout@example.com" } ``` | Field | Description | | ------- | -------------------------------------------- | | `type` | The type of suppression: `email` or `phone`. | | `value` | The value to suppress. | ### Remove from Suppression List | Property | Value | | ------------ | --------------------------------------------------- | | **Method** | `POST` | | **Endpoint** | `/api/v1/database-source/{slug}/suppression/remove` | **Request Body:** ```json theme={null} { "type": "email", "value": "optout@example.com" } ``` ### Fetch Suppression List | Property | Value | | ------------ | -------------------------------------------- | | **Method** | `GET` | | **Endpoint** | `/api/v1/database-source/{slug}/suppression` | Returns a paginated list of all suppressed values for this source. *** ## Rate Limiting To maintain platform stability, API requests to database source endpoints are subject to rate limits: | Limit | Value | | --------------- | -------------------------------------- | | **Create Lead** | 1,000 requests per minute per API key. | | **Fetch Leads** | 60 requests per minute per API key. | | **Suppression** | 500 requests per minute per API key. | When a rate limit is exceeded, the API returns a `429 Too Many Requests` response. Implement exponential backoff in your integration to handle rate limit responses gracefully. *** ## Best Practices * **Validate data before submission**: Pre-validate email format, phone length, and required fields on your end to minimize rejected leads. * **Handle duplicate responses**: A duplicate response is not an error — log it and continue processing your batch. * **Use pagination for large fetches**: Always paginate fetch requests rather than requesting all leads in a single call. * **Secure your API key**: Never expose the API key in client-side code, public repositories, or unencrypted storage. * **Monitor response codes**: Log all non-200 responses and alert on sustained error rates to detect integration issues early. # Source Leads Source: https://docs.pingtree.com/documentation/database/source-leads Browse, search, filter, and manage individual leads stored within a database source. ## Overview The **Source Leads** view displays every lead stored within a database source. From here you can search and filter leads, inspect individual records, update statuses, move leads between sources, and export data — all from a single interface. Source Leads view with search, filters, and lead summary cards *** ## Browsing Leads When you open a database source and navigate to the **Leads** tab, you will see a paginated table of all leads in that source. | Column | Description | | -------------- | --------------------------------------------------------------------- | | **Name** | The lead's full name. | | **Email** | The lead's email address. | | **Phone** | The lead's phone number. | | **Status** | Current status of the lead (e.g., Active, Sold, Rejected, Duplicate). | | **Source** | The database source this lead belongs to. | | **Created At** | Timestamp of when the lead was ingested. | | **Actions** | Quick-access buttons to view, edit, or move the lead. | *** ## Searching and Filtering Leads Use the search and filter controls above the leads table to narrow down results: | Filter | Description | | -------------- | ---------------------------------------------------------------- | | **Name** | Search by the lead's first or last name. | | **Email** | Filter by full or partial email address. | | **Phone** | Filter by phone number. | | **Status** | Filter by lead status (Active, Sold, Duplicate, Rejected, etc.). | | **Date Range** | Show only leads created within a specific date window. | > **Tip:** Combine the email filter with a date range to quickly identify if a specific contact submitted multiple times within a campaign window. *** ## Advanced Search with Elasticsearch For large databases containing thousands or millions of leads, the **Advanced Search** mode uses Elasticsearch to deliver fast, full-text search across all lead fields. To use Advanced Search: 1. Click the **Advanced Search** toggle at the top of the leads table. 2. Enter your query terms — these can span any field in the lead record. 3. Use field-specific filters alongside the free-text query for precision. 4. Results return in order of relevance. > **Tip:** Advanced Search supports fuzzy matching, so searching for "[john@gmal.com](mailto:john@gmal.com)" will still surface leads with "[john@gmail.com](mailto:john@gmail.com)" nearby. *** ## Viewing Lead Details Click any lead row to open its full detail view. The detail panel shows: * All captured lead fields and their values. * Metadata: submission date, source, IP address, and user agent. * **Distribution History**: which buyers or endpoints this lead was posted to, and the outcome of each post. * **Status History**: a log of every status change with timestamps and the user or system that triggered the change. *** ## Changing Lead Status To update a lead's status: 1. Open the lead detail view. 2. Click the **Status** dropdown. 3. Select the new status. 4. Confirm the change. Available statuses: | Status | Description | | -------------- | --------------------------------------------------------------------- | | **Active** | The lead is available for distribution or outreach. | | **Sold** | The lead has been successfully posted to a buyer. | | **Duplicate** | The lead was flagged as a duplicate during ingestion. | | **Rejected** | The lead failed validation or required field checks. | | **Suppressed** | The lead has been added to a suppression list and will not be posted. | *** ## Moving Leads Between Sources You can move one or more leads from their current database source to a different source: 1. Select the leads you want to move using the row checkboxes. 2. Click the **Move** action in the bulk actions toolbar. 3. Choose the destination database source from the dropdown. 4. Confirm the move. > **Tip:** Moving leads is non-destructive — the lead record is transferred intact, including all its field data and history. *** ## Exporting Leads as CSV To export leads from a database source: 1. Apply any filters you want to limit the export scope. 2. Click the **Export** button. 3. The system queues an async export job. 4. Once complete, the CSV file will appear in the **Exported Files** section for download. See [Exported Files](/documentation/database/exported-files) for more details on managing your export history. *** ## Lead Distribution Details For any lead that has been posted out, the **Distribution** tab within the lead detail view shows: * The endpoint or buyer the lead was sent to. * The request payload that was submitted. * The response received from the buyer system. * The outcome: Accepted, Rejected, or Error. * Timestamps for each post attempt. This makes it easy to troubleshoot rejected posts or verify successful distributions. # Webhooks & Posting Source: https://docs.pingtree.com/documentation/database/webhook-and-posting Configure post-out destinations to automatically forward leads from a database source to external systems, buyers, or CRMs. ## Overview The **Webhooks & Posting** section lets you configure post-out destinations for a database source. When a lead is stored in the source — or when a specific event occurs — the post-out system automatically sends the lead data to one or more external URLs. This enables real-time or event-driven lead delivery to buyer systems, CRMs, DSPs, or any HTTP endpoint. Webhook post-out configuration with endpoint URL, headers, and field mapping *** ## How Post-Outs Work 1. A lead enters the database source (via API submission, CSV import, or form capture). 2. If a post-out is configured and active, the system constructs a request using your field mapping. 3. The request is sent to the configured endpoint URL. 4. The system logs the request payload and the response received. 5. If the post fails, it can be retried depending on your retry settings. *** ## Creating a Post-Out Configuration To add a new post-out destination: 1. Navigate to the **Webhooks & Posting** tab within your database source. 2. Click **Add Post-Out**. 3. Configure the following settings: ### General Settings | Field | Description | | ---------------- | ------------------------------------------------------------ | | **Name** | A label for this post-out destination (e.g., "Buyer A CRM"). | | **Post URL** | The external endpoint URL where leads will be sent. | | **Request Type** | The HTTP method: `GET` or `POST`. | | **Is Active** | Enable or disable this post-out without deleting it. | ### Field Mapping Map your Pingtree lead fields to the parameter names expected by the receiving endpoint. | Column | Description | | --------------------- | ------------------------------------------------------------------------------------------ | | **Pingtree Field** | The source field from your lead record (e.g., `email`, `phone`, `first_name`). | | **Destination Field** | The field name or query parameter the external system expects (e.g., `lead_email`, `tel`). | > **Tip:** Always confirm the expected field names with your buyer or system integration partner before setting up field mapping. Mismatched field names are the most common cause of failed posts. *** ## Static Fields Static fields let you append fixed values to every post-out request, regardless of the individual lead data. Common uses for static fields: * Sending a campaign ID or source identifier to the buyer. * Including a partner code required for authentication. * Appending a fixed product type or vertical label. To add a static field: 1. In the post-out configuration, scroll to **Static Fields**. 2. Click **Add Static Field**. 3. Enter the field name and the fixed value to send. *** ## Authorization Headers If the receiving endpoint requires authentication, configure authorization headers to be included with every request. | Header Type | Description | | ----------------- | ----------------------------------------------------------------- | | **Bearer Token** | Attach a `Authorization: Bearer ` header. | | **Basic Auth** | Encode credentials as a `Authorization: Basic ` header. | | **Custom Header** | Define a custom header key and value (e.g., `X-API-Key: abc123`). | > **Tip:** Store sensitive credentials securely. Regenerate your tokens if a post-out configuration needs to be shared with external parties. *** ## Data Transformer Before a lead is sent to an external endpoint, you can apply **field transformations** to convert values into the format the destination system expects. Common transformations: * Converting `"yes"` / `"no"` to `"1"` / `"0"`. * Reformatting dates from `MM/DD/YYYY` to `YYYY-MM-DD`. * Normalizing phone numbers to E.164 format. * Truncating or prefixing string values. To configure a transformer: 1. In the field mapping table, click the **Transform** icon next to a field. 2. Select the transformation type (Value Map, Date Format, String Sanitizer, Prefix/Postfix). 3. Define the transformation rules. 4. Save the mapping. See [Data Transformer](/documentation/campaign/distribution/data-transformer) for detailed transformation options. *** ## Testing Post-Out Endpoints Before enabling a post-out in production, test it to verify the endpoint is reachable and your field mapping is correct: 1. Open the post-out configuration. 2. Click **Test Post-Out**. 3. The system sends a sample request to the configured URL using placeholder or real lead data. 4. Review the request payload and the response returned by the endpoint. 5. Adjust your field mapping or headers if needed, then test again. > **Tip:** Use a tool like [Webhook.site](https://webhook.site) or [RequestBin](https://pipedream.com/requestbin) as a temporary endpoint during testing to inspect exactly what Pingtree is sending before configuring your real buyer endpoint. *** ## Post-Out Logs Every post-out attempt is logged with full request and response details. To view logs: 1. Open the **Webhooks & Posting** tab. 2. Click **View Logs** next to a post-out configuration. 3. The log table shows: | Column | Description | | ------------------- | ---------------------------------------------------- | | **Timestamp** | When the post was attempted. | | **Lead ID** | The lead that was posted. | | **Status** | Outcome of the post: Success, Failed, or Error. | | **Request Payload** | The exact data sent to the endpoint. | | **Response Body** | The raw response returned by the external system. | | **Response Code** | The HTTP status code returned (e.g., 200, 400, 500). | > **Tip:** Filter logs by **Failed** status to identify post-outs that need attention. Common failure causes include endpoint downtime, authentication errors, and missing required fields. *** ## Multiple Post-Out Destinations A single database source can have multiple post-out configurations active simultaneously. This allows you to deliver the same lead to several buyers or systems at once. Each post-out destination is independent — it has its own URL, field mapping, static fields, and headers. You can enable or disable individual post-outs without affecting others. *** ## Enabling and Disabling Post-Outs Toggle the **Is Active** switch on any post-out configuration to pause or resume it: * **Active**: Leads are posted to this destination as they arrive. * **Inactive**: The post-out is paused. No leads are sent until it is re-enabled. Disabling a post-out does not delete its configuration or logs. # Domain Management Source: https://docs.pingtree.com/documentation/domains/domain-list Add, manage, and assign custom domains for your campaigns and funnels — including DNS setup, expiration tracking, and auto-renewal management. ## Overview The **Domain Management** section lets you add and manage custom domains for your campaigns, funnels, and tracking links. Pingtree handles DNS configuration automatically through AWS Route53, so you don't need to manually create DNS records. Navigate to **Domains** in the main sidebar to access this section. *** ## Domain List The domain list shows all domains registered or linked to your organization. Use the filters and search bar to find specific domains quickly. | Column | Description | | ------------------- | ---------------------------------------------------------------- | | **Domain** | The full domain name (e.g., `leads.yourbrand.com`) | | **Type** | Whether the domain is a redirect domain or a custom domain | | **Status** | Current state of the domain (see status definitions below) | | **Assigned To** | The campaign or funnel this domain is linked to | | **Expiration Date** | When the domain registration expires | | **Auto-Renewal** | Whether auto-renewal is enabled for this domain | | **Organization** | The organization this domain belongs to (for multi-org accounts) | *** ## Domain Status | Status | Meaning | | ----------- | -------------------------------------------------------------------------------- | | **Pending** | DNS records have been created; waiting for propagation (can take up to 48 hours) | | **Active** | The domain is verified and fully operational | | **Error** | There is a DNS or configuration issue preventing the domain from working | | **Expired** | The domain registration has lapsed | If a domain is stuck in **Pending** for more than 48 hours, check that your domain's nameservers are pointing to the correct DNS provider, or contact support. *** ## Adding a Custom Domain 1. Click **+ Add Domain**. 2. Enter your domain name (e.g., `apply.yourbrand.com`). 3. Click **Add**. 4. Pingtree will automatically create the required DNS records via AWS Route53. 5. The domain enters **Pending** status while DNS propagates. 6. Once propagation is complete, the domain moves to **Active**. > **Tip:** If your domain is registered with an external registrar (GoDaddy, Namecheap, etc.), you may need to update your domain's nameserver settings to point to Route53. Pingtree will provide the nameserver values during setup. *** ## Buying a Redirect Domain Pingtree allows you to purchase redirect domains directly through the platform without needing to go to a third-party registrar. 1. Click **+ Buy Domain**. 2. Search for the domain name you want to register. 3. Select an available domain from the results. 4. Complete the purchase. Purchased domains are automatically configured with the correct DNS settings and appear in your domain list ready to use. *** ## Assigning a Domain to a Campaign or Funnel Once a domain is active, assign it to the campaign or funnel that should use it. 1. Click on the domain in your domain list. 2. Click **Assign**. 3. Select the **campaign** or **funnel** from the dropdown. 4. Save. > **Note:** A domain can typically be assigned to one campaign or funnel at a time. To reassign a domain, reset its bindings first (see below). *** ## Resetting Domain Bindings If you need to move a domain from one campaign to another, reset its current binding first. 1. Open the domain from the domain list. 2. Click **Reset Bindings**. 3. Confirm the reset. The domain is now unassigned and available to be linked to a different campaign or funnel. *** ## Auto-Renewal Management Auto-renewal prevents domains from expiring unexpectedly. You can control this setting per domain. 1. Locate the domain in your list. 2. Toggle **Auto-Renewal** on or off. When auto-renewal is on, the domain is automatically renewed before expiration using your default payment method. If renewal fails (e.g., due to a payment issue), you will receive an email alert. *** ## Domain Expiration Tracking The domain list displays expiration dates for all registered domains. Domains nearing expiration are highlighted to draw your attention. * Pingtree sends expiration reminder emails at **30 days**, **14 days**, and **7 days** before a domain expires. * If auto-renewal is disabled, you must manually renew the domain before it expires to avoid losing it. > **Important:** Expired domains become publicly available for registration by anyone. If a domain tied to active campaigns expires, traffic to that domain will break. Always monitor expiration dates. *** ## Deleting a Domain 1. Open the domain's actions menu. 2. Click **Delete Domain**. 3. Confirm the deletion. Deleting a domain from Pingtree removes it from the platform and deactivates any DNS records Pingtree manages. If the domain is registered through Pingtree, deletion does not cancel the registration — contact support if you also want to cancel the registration. *** ## Filtering the Domain List Use the filter panel to narrow down the domain list: | Filter | Options | | ----------------------- | ---------------------------------------------------- | | **Organization** | Filter by organization (for multi-org accounts) | | **Type** | Redirect domain or custom domain | | **Company Ownership** | Domains owned by your company vs. managed externally | | **Auto-Renewal Status** | Show only domains with auto-renewal on or off | | **Status** | Filter by Active, Pending, Error, or Expired | # All Funnels Source: https://docs.pingtree.com/documentation/funnel-builder/all-funnels Browse, search, and manage every funnel across your Pingtree organization from a single, centralized list. ## Overview The **All Funnels** page is your organization-wide hub for every funnel that has been built in Pingtree. Unlike the per-campaign funnel view, this page shows funnels across all campaigns in one place — making it easy to search, reuse, and manage your entire funnel library. A funnel in Pingtree is made up of three core components: a **landing page**, a **form**, and any **additional pages** (such as a thank you page or offer wall). These components work together to guide a visitor from first click to lead submission. All funnels list view with status and actions *** ## Funnel List Table Each row in the table represents a single funnel. The following columns are displayed by default: | Column | Description | | ---------------- | -------------------------------------------------------------- | | **Name** | The funnel's display name | | **Unique ID** | A system-generated identifier used across the platform and API | | **Status** | Whether the funnel is Active or Inactive | | **Variations** | Number of landing page variations configured for A/B testing | | **Type** | Theme-based (built from a template) or custom-built | | **Created Date** | The date the funnel was first created | *** ## Searching and Filtering Use the toolbar at the top of the list to quickly narrow down the funnels you need: * **Search bar** — Search by funnel name or unique ID. * **Status filter** — Show only Active or Inactive funnels. * **Campaign filter** — Show only funnels assigned to a specific campaign. * **Unassigned filter** — Show funnels that have not yet been linked to any campaign. > **Tip:** The Unassigned filter is especially useful after importing or duplicating funnels. It helps you spot any funnels that are ready to be deployed but haven't been connected to a campaign yet. *** ## Funnel Types Pingtree supports two starting points when building a funnel: | Type | Description | | ---------------- | ----------------------------------------------------------------------------------------------------------- | | **Theme-Based** | Built from a pre-designed theme template. Includes layout, styling, and placeholder content out of the box. | | **Custom-Built** | Started from scratch using the visual drag-and-drop builder. Gives you full control over every element. | Both types support the full range of features including A/B testing, form configuration, and tracking integrations. *** ## Unassigned Funnels Funnels that are not linked to a campaign are listed under the **Unassigned** filter. This can happen when: * A funnel is created independently in the funnel builder before a campaign is ready. * A funnel is duplicated but not yet deployed. * A funnel was previously removed from a campaign. You can assign any unassigned funnel to a campaign directly from this list using the **Assign to Campaign** quick action. *** ## Quick Actions Each funnel row has an actions menu (accessible via the three-dot icon). Available actions include: | Action | Description | | ------------------------- | ----------------------------------------------------------------------------- | | **Edit** | Open the funnel in the builder to modify landing pages, forms, or other pages | | **Duplicate** | Create a full copy of the funnel, including all its pages and settings | | **Assign to Campaign** | Link the funnel to a campaign so it can receive and process traffic | | **Activate / Deactivate** | Toggle the funnel's live status on or off | > **Tip:** Use **Duplicate** to spin up A/B test variants quickly. Duplicate an existing funnel, make targeted changes to the copy, then assign both to the same campaign and split traffic between them. *** ## A/B Testing with Variations Each funnel can have multiple **landing page variations**. These variations allow you to test different headlines, layouts, form positions, or calls to action against each other without creating entirely separate funnels. The **Variations** column in the funnel list shows at a glance how many variants are active for each funnel. You can manage variation traffic splits from within the funnel's settings. *** ## Funnel Status | Status | Meaning | | ------------ | ---------------------------------------------------- | | **Active** | The funnel is live and can serve traffic | | **Inactive** | The funnel is paused; it will not serve any visitors | Status changes take effect immediately and can be toggled at any time from the quick actions menu. # Click Listing API Source: https://docs.pingtree.com/documentation/funnel-builder/click-listing-api Fetch and embed click-based offer listings via API or iFrame using Pingtree’s dynamic rendering capabilities. The Click Listing API and iFrame options allow you to dynamically retrieve or embed offer listings tied to specific transactions. Use these tools to extend Pingtree-powered listings into your external environments like custom funnels, landing pages, or partner sites. ## Click Listing API Endpoint Use the Click Listing API to retrieve listings programmatically for a given transaction. * **API URL Template:** ``` https://api.pingtree.com/click/list/cp379/[[transaction_id]] ``` Replace `[[transaction_id]]` with the actual transaction ID generated during the form submission. * **Generate Token:** Click **Generate New Token** to create an authentication token. Use **Copy Token** to copy it for use in the request. * **Header Format:** ```json theme={null} { "Authorization": "Bearer " } ``` ## Use Case: Send a `transaction_id` to retrieve personalized offer blocks for that lead. The API response returns listing details such as: * Offer title * CTA highlights * Redirection URLs * Mapped lead fields (if configured) ## Response Codes: Reference status codes are available in the interface to help interpret the results. ## Click Listing iFrame Use the iFrame embed option to display listings visually within your own site or landing page. ## Whitelist Domain (Optional): Toggle Enable Whitelist to restrict iframe visibility to a specific domain. * Enter only the domain name (e.g., `yourdomain.com`) without `http://` or `https://`. * Click Submit to save. ## iFrame Embed Code: A ready-to-use `