data-manager-api-event-ingestion
>-
pinned to #b128758updated 2 weeks ago
Ask your AI client: “install skills/data-manager-api-event-ingestion”.
Requires the metahub MCP server installed in your client. Set up MCP.
mh install skills/data-manager-api-event-ingestionmetahub onboarded this repo on the author's behalf.
If you own github.com/google/skills on GitHub, claim the listing to take over publishing. Your claim preserves the existing eval history and badges; only the curator label is replaced with verified-publisher on your next publish.
Stars
14,510
Last commit
2 weeks ago
Latest release
published
- #googlecloud
- #skills
Evaluation report
WarningsAutomated checks the publisher passed at publish time — structure, docs, safety, and whether the artifact behaves as claimed.b128758· 2 weeks ago
Documentation
121Description qualityfail
Only 1 words · 2 chars — minimum 15 words
A skill's description doubles as its trigger. Describe what it does, when to use it, what file types it handles.
README is present and substantialwarn
README present but its contents couldn't be read this scan
Transient fetch issue — re-run the eval to grade the README's substance.
Tags / topics declaredwarn
No manifest tags and no GitHub repo topics
Add tags to the manifest (or GitHub topics on the repo) so the registry's search and category filters surface this artifact.
Homepage / docs URL declared
no homepage declared (registry will use the repo URL) — info-only, not blocking
Release history
1- releasecurrentb128758warn2 weeks ago
Contents
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's not
explicitly stated, STOP and CLARIFY with the user where the data is being
sent (e.g., Google Ads, Floodlight, Google Analytics)
BEFORE generating any code. Do not assume Google Ads by default. This maps
to the
account_typefield of theoperating_accountin theDestination, and also determines valid event identifiers and requirements. - Read Documentation: [CRITICAL] Follow the Send events guide to implement the integration, as steps for configuring and sending the request may vary between destinations.
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
[!CRITICAL] If refactoring code to upgrade from another Google API, ALWAYS extract the full contents of the relevant field mapping guide.
Google Ads
- Google Ads API Offline Conversions: Google Ads Offline Conversions Migration Field Mappings
- Google Ads API Store Sales: Google Ads Store Sales Migration Field Mappings
Google Analytics
- Measurement Protocol (Google Analytics): Google Analytics Measurement Protocol Migration Field Mappings
Campaign Manager 360 (CM360)
- Campaign Manager 360 API Offline Conversions: 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 returned request ID for logging/troubleshooting. - 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
[!IMPORTANT] Refer to Understand API Errors for a detailed guide on how to understand the structure of errors 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).
- Event Record Counts: Check
API Reference
Reviews
No reviews yet. Be the first.
Related
Guizang Ppt Skill
AI-agent Skill for generating polished HTML slide decks: editorial magazine and Swiss layouts, image prompts, social covers, and a WebGL/low-power presentation runtime.
orchestration-patterns
>
migration-patterns
>
mh install skills/data-manager-api-event-ingestion