PULSE API Documentation
PULSE is a secure, API-driven performance intelligence platform developed by Greenberg Enterprises to provide scalable access to advertising and campaign performance data. Designed for organizations that require transparency, automation, and flexibility, the PULSE API enables teams to retrieve standardized reporting across campaigns, creatives, sites, apps, and geographies. Access to the API is licensed on a monthly basis, with pricing aligned to scope of use and data consumption needs. PULSE supports daily, weekly, and monthly reporting workflows, making it suitable for both operational monitoring and strategic analysis without reliance on manual exports or platform-specific interfaces.
Welcome to the PULSE API Documentation
PULSE, powered by Greenberg Enterprises, is a performance intelligence and reporting platform designed to provide programmatic transparency, actionable insights, and scalable access to campaign data across channels, formats, and environments.
This documentation serves as a technical reference for developers, analysts, and data teams integrating directly with the PULSE API. It outlines authentication requirements, endpoint definitions, request parameters, and response schemas to enable efficient access to reporting and performance data.
The PULSE API is built to support:
Secure, authenticated access to advertising performance data
Flexible querying across time ranges, advertisers, and campaigns
Consistent response structures optimized for analytics, dashboards, and downstream systems
Common Use Cases
The PULSE API is designed to support a wide range of reporting, analytics, and activation workflows across marketing, analytics, and engineering teams. Common use cases include:
- Scheduled report generation
- Elimination of manual exports
- Consistent, auditable metrics across systems
- Spend efficiency and delivery pacing
- Impression and click performance by day
- Auction-level dynamics impacting outcomes
- Which creatives are driving engagement
- Performance variation across formats
- Opportunities for creative rotation or refresh
- Identify high- and low-performing markets
- Inform regional budget allocation
- Support market expansion and localization strategies
- Monitor domain and app-level delivery
- Evaluate quality and performance across environments
- Support brand safety, supply-path, and optimization initiatives
- Centralize performance data
- Enable historical analysis and forecasting
- Support custom attribution, modeling, or incrementality studies
API Overview
The PULSE Public API exposes seven core endpoints, each designed to deliver a specific view of performance and operational data:
- Public API Key: Generates the authentication key required to access protected endpoints
- Campaign Performance: Returns aggregated campaign-level performance metrics over a defined date range
- Daily Auction: Provides daily auction-level performance insights, including impressions, spend, and bid dynamics
- Domain (Sites/Apps) Report: Delivers site-domain–level performance data, enabling domain analysis and optimization
- App Report: Returns performance metrics aggregated by application ID
- Creative Report: Provides creative-level performance insights to support asset evaluation and optimization
- Geo Report: Returns geographic performance data with support for country, region, and ZIP-code breakouts
Each endpoint is documented with required headers, parameters, example requests, and response structures to ensure clarity and ease of implementation.
| Endpoint | Path | Auth Required |
|---|---|---|
| Public API Key | /api/public/keys/hint | No |
| Campaign Performance | /performance/ | Yes |
| Daily Auction | /daily-auction/ | Yes |
| Domain (Sites/Apps) Report | /site/ | Yes |
| App Report | /app/ | Yes |
| Creative Report | /creative/ | Yes |
| Geo Report | /geo/ | Yes |
| Domain Report | /domain/ | No |
Licensing & Access Model
Access to the PULSE API is provided under a monthly license agreement. Pricing is based on scope of use, including:
- Frequency of data access (daily, weekly, or monthly)
- Volume of requests and reporting needs
- Breadth of endpoints utilized
This flexible model ensures clients only pay for the level of access required to support their reporting and analytics workflows. API keys are issued per licensed account and are required for all protected endpoints.
Commercial Terms Disclaimer (Non-Binding)
All commercial, licensing, pricing, rate limit, usage, and access information referenced in this documentation is provided solely for informational purposes and does not constitute an offer, promise, representation, warranty, or commitment of any kind. No reliance should be placed on any such information for purchasing, contracting, or usage decisions.
Access to and use of the PULSE API is subject to the execution of a separate, written agreement with Greenberg Enterprises. All commercial terms, including but not limited to fees, usage limits, access rights, and service scope, are governed exclusively by the terms and conditions set forth in the applicable executed agreement. In the event of any conflict between this documentation and an executed agreement, the terms of the executed agreement shall control. Greenberg Enterprises reserves the right to modify, update, or discontinue any aspect of the PULSE API, including pricing models, rate limits, and access requirements, at its sole discretion and without notice, except as expressly provided in a binding agreement.
Getting Started
All protected endpoints require an
Rate Limits
To ensure platform stability and consistent performance across all clients, API usage is subject to rate limits aligned with the licensed scope of use.
| Access Tier | Intended Use |
|---|---|
| Daily | Automated pipelines, dashboards, and operational monitoring |
| Weekly | Performance reviews and optimization cycles |
| Monthly | Executive reporting, billing reconciliation, and historical analysis |
Specific rate limits and usage thresholds are defined as part of the licensing agreement.
Best Practices
- Cache responses where possible to avoid redundant requests for unchanged data
- Use appropriate date ranges — some endpoints enforce a maximum date window of 7 days
- Align request frequency with your licensed scope to avoid unnecessary usage
- Secure API keys and avoid hardcoding them in client-side applications
- Monitor response codes to handle validation errors, authorization issues, or unexpected server errors gracefully
Following these practices helps maintain reliability while maximizing the value of the PULSE API.
Getting Started
All protected endpoints require an
Public API Key
curl --request GET \
--url https://api.greenbergenterprises.com/keys/hint/?agency_id=544
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| agency_id | number | Required | The unique identifier for the agency. Example: |
Responses
{
"key_hint": "aY5Q" // last 4 characters
}
{
"error": {
"code": "NOT_FOUND",
"message": "Agency not found",
"details": {
"field": "agency_id",
"value": "544"
},
"request_id": "4b7bd3b3-21fa-47ae-8369-78e658408a51"
}
}
Campaign Performance
curl --request GET \
--url https://api.greenbergenterprises.com/public/performance
/?date_from=2025-01-01&date_to=2025-01-03&advertiser_id=544
Headers
| Header | Type | Required | Description |
|---|---|---|---|
| X-Api-Key | string | Required | The agency's API key for authorization. Ask your admin to create one for your usage. |
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| date_from | string | Required | Date starting from response will be generated. Example: |
| date_to | string | Required | Date ending with response will be generated. Example: |
| advertiser_id | number | Required | The unique identifier for the advertiser. Example: |
Responses
{
"data": [
{
"...": "..."
}
],
"pagination": {
"total_records": 100,
"total_pages": 10
},
"parameters": {
"date_from": "2023-01-01",
"date_to": "2023-01-03",
"advertiser_id": 544
}
}
| Field | Type | Description |
|---|---|---|
| data | array | An array of campaign performance objects. |
| pagination | object | An object containing pagination details. |
| pagination.total_records | integer | The total number of records found. |
| pagination.total_pages | integer | The total number of pages. |
| parameters | object | An object containing the query parameters used for the request. |
Returned if required query parameters like
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Missing required parameters",
"details": {
"missing_fields": ["date_from", "date_to"]
},
"request_id": "..."
}
}
Returned if the
Returned if there is an unexpected error on the server while fetching data.
Daily Auction
curl --request GET \
--url https://api.greenbergenterprises.com/daily-auction
/?date_from=2025-01-01&date_to=2025-01-03&advertiser_id=544
Headers
| Header | Type | Required | Description |
|---|---|---|---|
| X-Api-Key | string | Required | The agency's API key for authorization. Ask your admin to create one for your usage. |
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| date_from | string | Required | Start date. Example: |
| date_to | string | Required | End date. Example: |
| advertiser_id | number | Required | The unique identifier for the advertiser. Example: |
| response_format | string | optional | Response format. Default: |
Responses
{
"data": [
{
"campaign_id": 11111,
"campaign_name": "Name | Name | 11",
"impressions": 194,
"clicks": 3,
"spend": 0.65,
"budget": 1704.66,
"matched_bid_opp": 1096,
"date": "2025-04-30"
}
],
"pagination": {
"total_records": 100,
"total_pages": 10
},
"parameters": {
"date_from": "2023-01-01",
"date_to": "2023-01-03",
"advertiser_id": 544
}
}
| Field | Type | Description |
|---|---|---|
| data | array | An array of campaign performance objects. |
| pagination | object | An object containing pagination details. |
| pagination.total_records | integer | The total number of records found. |
| pagination.total_pages | integer | The total number of pages. |
| parameters | object | An object containing the query parameters used for the request. |
Returned if required query parameters like
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Missing required parameters",
"details": {
"missing_fields": ["date_from", "date_to"]
},
"request_id": "..."
}
}
Returned if the date range between
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Date range cannot exceed 7 days",
"details": {
"date_from": "2025-01-01",
"date_to": "2025-01-09",
"date_range": 8,
"max_allowed": 7
},
"request_id": "4cf3fd6c-b2a8-483d-bb50-f51255c4943c"
}
}
Returned if the
Returned if there is an unexpected error on the server while fetching data.
Site Report
Get site performance data aggregated by site domain.
curl --request GET \
--url https://api.greenbergenterprises.com/site
/?date_from=2024-01-01&date_to=2024-01-07&advertiser_id=544
Headers
| Header | Type | Required | Description |
|---|---|---|---|
| X-Api-Key | string | Required | The agency's API key for authorization. Contact an admin to get one. |
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| date_from | string | Required | Start date in YYYY-MM-DD format. |
| date_to | string | Required | End date in YYYY-MM-DD format. |
| advertiser_id | integer | Required | The unique identifier for the advertiser. |
| page | integer | optional | Page number for pagination. Default: |
| sort_column | string | optional | Column to sort by. Default: |
| sort_order | string | optional | Sort order. Default: |
| campaign_id | integer | optional | Filter by a specific campaign ID. |
Responses
{
"data": [
{
"site_domain": "example.com",
"impressions": 1000,
"clicks": 50,
"total_conversions": 5,
"video_audio_views": 200,
"video_audio_complete": 150,
"total_revenue": 100.50,
"total_spend": 50.25,
"cpm": 50.25,
"cpc": 1.005,
"cpa": 10.05,
"cpv": 0.25,
"roas": 2.0,
"vcr": 75.0,
"ctr": 5.0
}
],
"pagination": {
"current_page": 0,
"total_pages": 5,
"total_count": 100
}
}
| Field | Type | Description |
|---|---|---|
| data | array | An array of site performance objects. |
| pagination | object | An object containing pagination details. |
| pagination.current_page | integer | The current page number. |
| pagination.total_pages | integer | The total number of pages. |
| pagination.total_count | integer | The total number of records. |
Returned if required query parameters like
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Missing required parameters",
"details": { "missing_fields": ["date_from", "date_to"] },
"request_id": "..."
}
}
Returned if the
Returned if there is an unexpected error on the server while fetching data.
App Report
Get app performance data aggregated by app ID.
curl --request GET \
--url https://api.greenbergenterprises.com/app
/?date_from=2024-01-01&date_to=2024-01-07&advertiser_id=544
Headers
| Header | Type | Required | Description |
|---|---|---|---|
| X-Api-Key | string | Required | The agency's API key for authorization. Contact an admin to get one. |
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| date_from | string | Required | Start date in YYYY-MM-DD format. |
| date_to | string | Required | End date in YYYY-MM-DD format. |
| advertiser_id | integer | Required | The unique identifier for the advertiser. |
| page | integer | optional | Page number for pagination. Default: |
| sort_column | string | optional | Column to sort by. Default: |
| sort_order | string | optional | Sort order. Default: |
| campaign_id | integer | optional | Filter by a specific campaign ID. |
Responses
{
"data": [
{
"app_id": "com.example.app",
"app_name": "Example App",
"impressions": 1000,
"clicks": 50,
"total_conversions": 5,
"video_audio_views": 200,
"video_audio_complete": 150,
"total_revenue": 100.50,
"total_spend": 50.25,
"ctr": 5.0,
"cpm": 50.25,
"cpc": 1.005,
"cpa": 10.05,
"cpv": 0.25,
"vcr": 75.0,
"roas": 2.0
}
],
"pagination": {
"current_page": 0,
"total_pages": 5,
"total_count": 100
}
}
| Field | Type | Description |
|---|---|---|
| data | array | An array of app performance objects. |
| pagination | object | An object containing pagination details. |
| pagination.current_page | integer | The current page number. |
| pagination.total_pages | integer | The total number of pages. |
| pagination.total_count | integer | The total number of records. |
Returned if required query parameters like
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Missing required parameters",
"details": {
"missing_fields": ["date_from", "date_to"]
},
"request_id": "..."
}
}
Returned if the
Returned if there is an unexpected error on the server while fetching data.
Creative Report
Get creative performance data aggregated by creative name.
curl --request GET \
--url https://api.greenbergenterprises.com/creative
/?date_from=2024-01-01&date_to=2024-01-07&advertiser_id=544
Headers
| Header | Type | Required | Description |
|---|---|---|---|
| X-Api-Key | string | Required | The agency's API key for authorization. Contact an admin to get one. |
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| date_from | string | Required | Start date in YYYY-MM-DD format. |
| date_to | string | Required | End date in YYYY-MM-DD format. |
| advertiser_id | integer | Required | The unique identifier for the advertiser. |
| page | integer | optional | Page number for pagination. Default: |
| sort_column | string | optional | Column to sort by. Default: |
| sort_order | string | optional | Sort order (ASC/DESC). Default: |
| campaign_id | integer | optional | Filter by a specific campaign ID. |
| with_campaign | string | optional | Include campaign information. Default: |
| search | string | optional | Search filter for creative names. |
Responses
{
"data": [
{
"date": "2025-04-30",
"campaign_name": "Name | Name2 | 11111",
"impressions": 208,
"reach": 0,
"frequency": 0.0,
"clicks": 1,
"total_conversions": 0,
"engagements": 0,
"video_audio_views": 0,
"video_audio_complete": 0,
"total_revenue": 0.0,
"total_spend": 0.909,
"cpm": 4.368,
"cpc": 0.909,
"cpa": 0.0,
"cpv": 0.004,
"cpv_video": 0.0,
"cpcv_video": 0.0,
"roas": 0.0,
"matched_bid_opp": 393941000,
"vcr": 0.0,
"ctr": 0.48,
"campaign_ids": { "growth": [11111] },
"advertiser_ids": { "growth": [11111] },
"dsp": "Beeswax"
}
],
"pagination": {
"current_page": 0,
"total_pages": 5,
"total_count": 100
}
}
Returned if required query parameters like
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Missing required parameters",
"details": {
"missing_fields": ["date_from", "date_to"]
},
"request_id": "..."
}
}
Returned if the
Returned if there is an unexpected error on the server while fetching data.
Geo Report
Get geographic performance data aggregated by location.
# Country-level report
curl --request GET \
--url https://api.greenbergenterprises.com/geo/?date_from=2024-01-01&date_to=2024-01-07&advertiser_id=544&breakout=country
# Region-level report
curl --request GET \
--url https://api.greenbergenterprises.com/geo/?date_from=2024-01-01&date_to=2024-01-07&advertiser_id=544&breakout=region
# ZIP code-level report
curl --request GET \
--url https://api.greenbergenterprises.com/geo/?date_from=2024-01-01&date_to=2024-01-07&advertiser_id=544&breakout=zip_code
Headers
| Header | Type | Required | Description |
|---|---|---|---|
| X-Api-Key | string | Required | The agency's API key for authorization. Contact an admin to get one. |
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| date_from | string | Required | Start date in YYYY-MM-DD format. |
| date_to | string | Required | End date in YYYY-MM-DD format. |
| advertiser_id | integer | Required | The unique identifier for the advertiser. |
| page | integer | optional | Page number for pagination. Default: |
| breakout | string | optional | Geographic breakdown level. Default: |
| campaign_id | integer | optional | Filter by a specific campaign ID. |
Breakout Options
| Value | Description |
|---|---|
| country | Aggregates data by country. |
| region | Aggregates data by state or region. |
| zip_code | Aggregates data by postal code. |
Responses
{
"data": [
{
"country": "US",
"impressions": 1000,
"clicks": 50,
"total_conversions": 0,
"video_audio_views": 0,
"video_audio_complete": 0,
"total_revenue": 0.0,
"total_spend": 0.005,
"cpm": 5.126,
"cpc": 0.0,
"cpa": 0.0,
"cpv": 0.005,
"cpv_video": 0.0,
"cpcv_video": 0.0,
"roas": 0.0,
"vcr": 0.0,
"ctr": 0.0
}
],
"pagination": {
"current_page": 0,
"total_pages": 5,
"total_count": 100
},
"breakout": "country"
}
| Field | Type | Description |
|---|---|---|
| data | array | An array of geographic performance objects. The location key ( |
| pagination | object | An object containing pagination details. |
| breakout | string | The breakout level used for the request. |
{
"data": [
{
"country": "US",
"region": "Jalisco",
"impressions": 1000,
"clicks": 50,
"total_conversions": 0,
"video_audio_views": 0,
"video_audio_complete": 0,
"total_revenue": 0.0,
"total_spend": 0.005,
"cpm": 5.126,
"cpc": 0.0,
"cpa": 0.0,
"cpv": 0.005,
"cpv_video": 0.0,
"cpcv_video": 0.0,
"roas": 0.0,
"vcr": 0.0,
"ctr": 0.0
}
],
"pagination": {
"current_page": 0,
"total_pages": 5,
"total_count": 100
},
"breakout": "region"
}
{
"data": [
{
"country": "US",
"zip_code": "60074",
"impressions": 1000,
"clicks": 50,
"total_conversions": 0,
"video_audio_views": 0,
"video_audio_complete": 0,
"total_revenue": 0.0,
"total_spend": 0.005,
"cpm": 5.126,
"cpc": 0.0,
"cpa": 0.0,
"cpv": 0.005,
"cpv_video": 0.0,
"cpcv_video": 0.0,
"roas": 0.0,
"vcr": 0.0,
"ctr": 0.0
}
],
"pagination": {
"current_page": 0,
"total_pages": 5,
"total_count": 100
},
"breakout": "zip_code"
}
Returned if required query parameters are missing.
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Missing required parameters",
"details": {
"missing_fields": ["date_from", "date_to"]
},
"request_id": "..."
}
}
Returned if the
Returned if there is an unexpected server error.
Domain Report
Get domain performance data aggregated by domain.
curl --request GET \
--url https://api.greenbergenterprises.com/domain
/?date_from={date_from}&date_to={date_to}&advertiser_id={advertiser_id}
Headers
| Header | Type | Required | Description |
|---|---|---|---|
| X-Api-Key | string | Required | The agency's API key for authorization. Contact an admin to get one. |
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| date_from | string | Required | Start date in YYYY-MM-DD format. |
| date_to | string | Required | End date in YYYY-MM-DD format. |
| advertiser_id | integer | Required | The unique identifier for the advertiser. |
| page | integer | optional | Page number for pagination. Default: |
| sort_column | string | optional | Column to sort by. Default: |
| sort_order | string | optional | Sort order (ASC/DESC). Default: |
| campaign_id | integer | optional | Filter by a specific campaign ID. |
Responses
{
"data": [
{
"domain": "example.com",
"impressions": 1200,
"clicks": 45,
"total_conversions": 3,
"video_audio_views": 300,
"video_audio_complete": 190,
"total_revenue": 120.30,
"total_spend": 56.00,
"cpm": 46.67,
"cpc": 1.24,
"cpa": 18.67,
"cpv": 0.18,
"roas": 2.15,
"vcr": 63.3,
"ctr": 3.75
}
],
"pagination": {
"current_page": 0,
"total_pages": 5,
"total_count": 100
}
}
Returned if required query parameters like
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Missing required parameters",
"details": {
"missing_fields": ["date_from", "date_to"]
},
"request_id": "..."
}
}
Returned if the
Returned if there is an unexpected error on the server while fetching data.
