Data Manager API Event Ingestion
GoogleOfficialPublished by Google
- Skill
- Tool integration
- Automation and integrations
- Apache-2.0
- No issues found
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
This skill provides a comprehensive guide for developers to integrate the Data Manager API for event and conversion ingestion. It covers the end-to-end implementation workflow, including client initialization, payload construction, data formatting, and diagnostic procedures. The skill emphasizes correct configuration of destination accounts, proper handling of user identifiers, and the use of official client libraries for Python, Java, PHP, Node, and .NET. It also includes critical migration paths for developers transitioning from legacy Google APIs.
What it does
- Guides the implementation of event and conversion ingestion for Google Ads, Google Analytics, and Floodlight.
- Provides standardized code samples for multiple programming languages including Python, Java, and Node.
- Details the process for formatting, hashing, and encrypting user data using utility libraries.
- Outlines the asynchronous diagnostic workflow for verifying ingestion status and handling errors.
- Offers migration field mappings for users moving from Google Ads API or Measurement Protocol.
- Highlights critical implementation gotchas regarding field naming, consent status, and identifier nesting.
When to use it
- When you need to upload offline, click, or store sales conversions to Google Ads.
- When you are implementing recommended or custom GA4 event tracking.
- When you need to migrate existing conversion tracking from legacy Google APIs to the Data Manager API.
- When you need to validate event schemas before performing a live data upload.
- When you need to troubleshoot ingestion status or inspect field-level warnings.
Advantages
- Ensures adherence to strict API formatting and normalization requirements.
- Reduces integration errors by providing language-specific reference implementations.
- Provides a clear path for asynchronous status monitoring and error diagnostics.
- Simplifies the transition from older APIs with dedicated migration field mappings.
Usage examples
- “How do I implement offline conversion ingestion for Google Ads using Python?”
- The agent will provide the steps to initialize the IngestionServiceClient, format user data using the Formatter utility, and construct the IngestEventsRequest payload.
- “I am migrating from the Google Analytics Measurement Protocol to Data Manager API. What fields do I need to map?”
- The agent will provide the specific field mapping guide for GA4 events to ensure a smooth transition of your existing event tracking logic.
- “My ingestion request returned a request_id, but how do I verify if the records were processed successfully?”
- The agent will explain how to use the client.retrieve_request_status endpoint with the request_id to poll for processing results and inspect error or warning details.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/google/data-manager-api-event-ingestion/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip data-manager-api-event-ingestion.zip -d .agents/skills
Documentation by Google
Data Manager API Event Ingestion
Implementation Workflow
Prerequisites
Authentication & Library Installation: If you need to set up access to the Data Manager API or install the client and utility libraries, refer to the
data-manager-api-setupskill.
Step 1: Identify Use Case & Read Documentation
Determine Destination Account Type: [CRITICAL] If it can't be determined from the user's context, consider clarifying which destination events are being ingested to before generating any code. This maps to the
account_typefield of theoperating_accountin theDestination, and also determines valid event identifiers and requirements.Identify User Intent:
Implementing ingestion code: Follow the relevant implementation guide for the destination and use case in the Implementation guide column below. This is critical to ensure field requirements are met and destinations are correctly configured.
Checking request status or inspecting errors: Refer to the Error Handling & Troubleshooting section below.
Migrating from another Google API: Refer to Step 3: Retrieve Migration Guides below to extract the full contents of the relevant field mapping guide.
Destination (operating_account.account_type) | Use case | Implementation guide |
|---|---|---|
Google Ads (GOOGLE_ADS) | Offline conversions, enhanced conversions for leads | Send events |
Google Ads (GOOGLE_ADS) | Multi-source conversions supplementing the Google tag | Send events |
Google Ads (GOOGLE_ADS) | Store sales conversions | Send events |
Google Analytics (GOOGLE_ANALYTICS_PROPERTY) | Recommended and custom GA4 events | Send events |
Google Analytics (GOOGLE_ANALYTICS_PROPERTY) | Multi-source events with a transaction ID | Send events |
Floodlight (FLOODLIGHT_CONFIG) | Floodlight offline conversions | Send events |
Floodlight (FLOODLIGHT_CONFIG) | Multi-source conversions supplementing the Google or Floodlight tag | Send events |
If the request doesn't match any row, fetch the Events overview to find the right guide rather than guessing.
Step 2: Retrieve Code Sample
[!IMPORTANT] If writing or updating an ingestion script, ALWAYS retrieve the relevant code sample to use as a reference:
| Language | Sample |
|---|---|
| Python | ingest_events.py |
| Java | IngestEvents.java |
| PHP | ingest_events.php |
| Node | ingest_events.ts |
| .NET | IngestEvents.cs |
Step 3: Retrieve Migration Guides
[!IMPORTANT] If refactoring code to upgrade from another Google API, ALWAYS extract the full contents of the relevant field mapping guide.
Google Ads
Offline conversions, enhanced conversions for leads (migrating from the Google Ads API): Google Ads Offline Conversions Migration Field Mappings
Store sales conversions (migrating from the Google Ads API): Google Ads Store Sales Migration Field Mappings
Google Analytics
Recommended and custom GA4 events (migrating from the Google Analytics Measurement Protocol): Google Analytics Measurement Protocol Migration Field Mappings
Floodlight
Floodlight offline conversions (migrating from the Campaign Manager 360 API): Campaign Manager 360 Offline Conversions Migration Field Mappings
Step 4: Implementation
Implement the ingestion logic using the following checkpoints:
[ ] Initialize Client: Instantiate the Data Manager client (
IngestionServiceClient).[ ] Define Destinations: Build the
Destinationobject using theproduct_destination_idand the appropriate account configurations:operating_account(target account receiving data),login_account(if authenticating using a manager account or a data partner account), andlinked_account(if you're a data partner accessing the account via a partner link to a manager account). STRONGLY RECOMMENDED: Refer to the Configure destinations and headers guide for more details on configuring destinations.[ ] Prepare Event Data: Use the utility library helpers to format and normalize user identifiers correctly.
[ ] Construct Payload: Build the request payload (
IngestEventsRequest) containing the destinations, event records, and consent permissions.[ ] Support Validation: Support sending the
validate_onlyboolean option on theIngestEventsRequestto allow developers to validate schemas without actually uploading data.[ ] Send Request: Execute
ingest_eventsand record the returnedrequest_idfor later diagnostics.[ ] Check for Ingestion Warnings: If any non-required field had a validation failure, the response from
ingest_eventswill also includefield_warnings, a list ofFieldWarningobjects detailing the issues.[ ] Retrieve Request Status: Check the status of the ingestion request using diagnostics. Since request processing is asynchronous, a successful ingestion response (HTTP 200 OK returning a
request_id) only indicates the payload was received. To check if the records actually succeeded, partially succeeded, or failed to process, query theclient.retrieve_request_statusendpoint using therequest_id. Skipping this step is a common user mistake.
Formatting
Fetch the Format user data guide and use that as the source of truth for formatting and normalization rules.
Use the utility library to format, hash, and encrypt user data (emails, phone numbers, addresses).
Python Example:
from google.ads.datamanager_util import Formatter from google.ads.datamanager_util.format import Encoding formatter: Formatter = Formatter() processed_email: str = formatter.process_email_address( email, Encoding.HEX )
Critical Gotchas
Format
product_destination_idas a numeric string. It is NOT a resource name path.Format
event_timestampstrictly in RFC 3339 format. Use the SDK's typed timestamp object instead of a raw string where available.Nest click identifiers (
gclid,gbraid,wbraid) inside thead_identifiersblock, not directly on the base event payload.The enum values for
ConsentStatusareCONSENT_GRANTEDandCONSENT_DENIED. Do not use the valuesGRANTEDandDENIED.Note that
consentcan be set globally on theIngestEventsRequestor on individualEvents.Verify that
UserIdentifierusesemail_addressandphone_number. Do not use the Google Ads API fieldshashed_emailandhashed_phone_number.Ensure the currency field on the event is named
currency, notcurrency_code.Do not call the diagnostics endpoint (
retrieve_request_status) ifvalidate_onlyis set totrue.
Error Handling & Troubleshooting
Inspecting Error Payloads & Ingestion Warnings
[!IMPORTANT] Refer to Understand API Errors for a detailed guide on how to understand the structure of errors and warnings returned by the API.
Retrieving Request Status (Diagnostics)
Periodically poll for status using exponential backoff, starting at least
30 minutes after sending the IngestEventsRequest.
Call
client.retrieve_request_statususingRetrieveRequestStatusRequest(request_id=...).Loop through
request_status_per_destinationin the response to inspect each target'srequest_status.If processing is complete and
request_statusisSUCCESS,PARTIAL_SUCCESS, orFAILED, inspect diagnostic values:Event Record Counts: Check
events_ingestion_status.record_count(includes both success and failure).Error Details: If status is
FAILEDorPARTIAL_SUCCESS, inspect each error'sreasonandrecord_countundererror_info.error_counts.Warning Details: Inspect each warning's
reasonandrecord_countunderwarning_info.warning_counts(even if the destination status isSUCCESS).
API Reference
Files
- ATTRIBUTION.mdAdded by AutoGineer880 B
- LICENSELicence file added by AutoGineer11.1 KiB
- SKILL.md11.0 KiB
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs Python, Needs Node.js
Security
No issues found by our static scan· No issues found
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Published by
- Publisher
- Google (Official)
- Source
- google/skills · skills/ads/data-manager-api-event-ingestion · commit 2194d3b
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Google.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download data-manager-api-event-ingestion.zip