Google's Data Manager API defines TOO_MANY_ELEMENTS when a list in the request contains too many elements. The oversized list may be the top-level event collection or a nested repeated field. Blindly halving the entire request can change ordering, request IDs, deduplication, partial-failure handling, rate-limit behavior, and the ability to reconcile each source record.
Use this for WordPress event queues, CRM audience uploads, offline conversions, enhanced conversions, store sales, or composite data requests that aggregate many records or repeated identifiers.
Quick answer
Data Manager API TOO_MANY_ELEMENTS Batch Splitting Policy should be handled with a narrow evidence-first workflow: capture the field path, find the oversized list, assign stable identity, then verify the result before making broader changes.
What to check first
- Preserve the structured error, field path, request ID, destination, record count, nested list counts, payload bytes, and validation mode.
- Identify the exact list that exceeded the current contract instead of assuming the top-level batch is at fault.
- Assign a stable source record ID and idempotency policy before splitting accepted and unaccepted work.
- Test fixed chunk sizes plus one boundary case while recording request order, HTTP status, partial failures, rate-limit headers, and returned request IDs.
- Reconcile source, queued, sent, accepted, rejected, retried, and permanently failed counts after the final chunk.
Diagnostic table
Use this table to keep the work practical. It connects the symptom to evidence and a verification step.
| Action | Evidence to collect | How to verify |
| Capture the field path | Preserve the structured error, field path, request ID, destination, record count, nested list counts, payload bytes, and validation mode. | Every source record reaches exactly one final accepted or permanently failed state. |
| Find the oversized list | Identify the exact list that exceeded the current contract instead of assuming the top-level batch is at fault. | Retries reuse stable source identity and do not duplicate previously accepted events. |
| Assign stable identity | Assign a stable source record ID and idempotency policy before splitting accepted and unaccepted work. | Chunk order and parallelism stay within the documented rate-limit policy. |
| Test controlled chunks | Test fixed chunk sizes plus one boundary case while recording request order, HTTP status, partial failures, rate-limit headers, and returned request IDs. | Request IDs and structured errors remain linked to the source and repair record. |
Why this usually happens
- A nested list can grow while the top-level event count still looks small.
- One WordPress form or CRM record can expand into many identifiers, items, or destination entries.
- A generic retry worker may rebuild a different batch each time and lose stable request identity.
- Aggressive parallel splitting can turn one validation error into rate limiting or out-of-order replay.
Useful command or data shape
Adapt paths, IDs, and privacy handling to the site before running commands or storing data on production.
chunk_policy:
source_batch_id: crm-2026-07-18-04
max_records_per_chunk: 500
max_parallel_requests: 2
stable_sort: source_record_id
retry: failed_records_only
reconcile: [queued, sent, accepted, rejected, permanent_failure]
Safe fix order
Do the work in a sequence that makes each result easy to prove. Stop if a step produces new evidence that changes the incident scope.
- Capture the field path
- Find the oversized list
- Assign stable identity
- Test controlled chunks
- Reconcile every record
Decision rule
Split at the list identified by the field path and use the smallest operational change that satisfies the current contract. Preserve stable source and chunk identities, retry failed records only, and limit parallelism so validation recovery does not create rate-limit failures.
What to tell the client or owner
Provide the error field path, source batch and record counts, nested list counts, payload size, chunk policy, request IDs, retry rules, parallelism, and final reconciliation totals.
Production verification checklist
- Every source record reaches exactly one final accepted or permanently failed state.
- Retries reuse stable source identity and do not duplicate previously accepted events.
- Chunk order and parallelism stay within the documented rate-limit policy.
- Request IDs and structured errors remain linked to the source and repair record.
Mistakes to avoid
- Do not halve the entire request before locating the oversized list.
- Do not create a new event ID on every retry.
- Do not retry accepted records with a failed subset.
- Do not increase parallelism until rate-limit and reconciliation evidence is recorded.
Questions teams ask during testing
Should chunks be as large as possible?
Not necessarily. Leave room for payload variation, nested elements, and operational recovery. Choose a documented size from boundary testing and current API guidance.
Can binary splitting find the boundary?
It can help during synthetic validation, but production policy still needs a stable maximum, payload check, rate-limit plan, and record ledger. Do not use real customer batches as an uncontrolled search experiment.
When HandL WP should help
HandL WP should help when a WordPress or CRM upload queue cannot separate accepted and failed work, or when retries duplicate conversions. We can design the chunk and reconciliation ledger around stable source IDs.
If this is active on a production site, repair Data Manager API batch processing.
Related HandL WP guides
Use these related guides when the same issue touches tracking, security, checkout, or crawler visibility.
Helpful references