Guide 199 · Conversions · GA4 + Tag Manager
List your key events with the Admin API: the inventory check, and the slots you have left
One GET returns every key event in a property — name, event name, counting method, default value, and whether it is custom — so you can count the custom slots used against the 30-event limit.
After step 5, you hold the full inventory — every key event, its counting method, and its default value — and the number of custom slots left against the 30-event ceiling.
Download the reference: the Admin API key event list (JSON) (2419 bytes, MD5 2db02ef814d6a4b605afc69a562dec24). It holds the report or event definition and the worked example with the recomputed figures shown on this page.
What you need
- The property resource name:
properties/followed by the property ID — for exampleproperties/123456789. - An OAuth token with a read scope. Listing key events accepts
https://www.googleapis.com/auth/analytics.readonlyorhttps://www.googleapis.com/auth/analytics.edit. A read is enough; you do not need edit access to count your slots. - The 30-event ceiling in mind. A standard property allows 30 key events, and custom events count towards that maximum — the list is how you check how many are left.
The trace
- Send the GET. GET
https://analyticsadmin.googleapis.com/v1beta/properties/123456789/keyEvents— the property ID in the path is your property's ID. The request body must be empty: this is a read, not a write. - Set the page size if the property is large. The optional
pageSizequery parameter sets the maximum number of resources to return. If you leave it out, at most 50 resources are returned. The maximum value is 200 — a higher value is coerced to the maximum, not rejected. A property with 30 key events at most never needs more than one page at the default size. - Read the response as a list. The response body holds
keyEvents, a list ofKeyEventobjects, and an optionalnextPageToken. EachKeyEventcarriesname,eventName,createTime,deletable,custom,countingMethodanddefaultValue. If the property has no key events, the call returns an empty list — that is a valid answer, not an error. - Count the custom slots. Split the list by the
customflag: true means the key event refers to a custom event, false means a default event. Custom events count towards the maximum number of custom key events per property. The worked example below counts an 8-event list and the slots it leaves. - Follow the token when there is one. If
nextPageTokenis present, send it back as thepageTokenquery parameter to get the next page. When you paginate, every other parameter on the call must match the call that provided the page token. If the field is omitted, there are no more pages.
Dead ends
DEAD END — READING AN EMPTY LIST AS A FAILED CALL. The list method returns an empty list when no key events are found. That is the documented result for a property with nothing marked yet — the call worked, and the inventory is zero.
DEAD END — ASKING FOR A PAGE SIZE ABOVE 200 AND EXPECTING AN ERROR. The maximum pageSize is 200, and higher values are coerced to the maximum. The call still succeeds; it just returns at most 200. If your list stops at 200, ask for the next page with the token instead of raising the size.
DEAD END — COUNTING DEFAULT EVENTS AGAINST THE CUSTOM CEILING. The custom flag is the split that matters. A default event such as purchase does not use a custom slot the same way a custom event does. Count only the rows where custom is true against the 30-event ceiling, or you will think you are out of slots when you are not.
End state
The list call is the inventory check: it shows what is marked, how each event is counted, and what each is worth by default, so the next key event is created against a counted ceiling instead of a guess. The worked example below counts one property's list.
Worked example — stated inputs, recomputed results. A property lists its key events. The list below is the stated inventory for the example; the counts and the remaining slots are recomputed from it.
| Event name | Custom or default | Counting method | Default value |
|---|---|---|---|
purchase | default | ONCE_PER_EVENT | — |
generate_lead | custom | ONCE_PER_SESSION | 25.00 CAD |
sign_up | custom | ONCE_PER_EVENT | — |
form_submit | custom | ONCE_PER_EVENT | — |
download_whitepaper | custom | ONCE_PER_SESSION | — |
book_demo | custom | ONCE_PER_SESSION | 50.00 CAD |
newsletter_signup | custom | ONCE_PER_EVENT | — |
phone_click | custom | ONCE_PER_EVENT | — |
| Total | 8 key events | — | — |
Custom key events are 7 of 8; the default event is 1. Custom events count towards the maximum of 30 per property, so 30 − 7 = 23 custom slots remain. The list holds 8 key events and the default page size is 50, so one page holds them all and there is no nextPageToken to follow.
Sources
- Google Analytics — Method: properties.keyEvents.list — the GET endpoint, the empty request body, the pageSize default of 50 and maximum of 200, the
nextPageTokenrule, the empty-list result, and the readonly scope - Google Analytics — REST Resource: properties.keyEvents — the
KeyEventfields on each list entry — custom, countingMethod, defaultValue — and that custom events count towards the per-property limit
Checked 11 November 2026. The click paths above are the ones in Google's help and developer pages, opened in full on 11 November 2026. No step in this guide was run inside a live Analytics property, because that needs a Google sign-in and this site does not sign in as anyone. The worked-example figures on this page were recomputed in Python with decimal arithmetic, and the downloadable JSON file carries the same recomputed figures. Google moves menu items without warning; if a path on this page no longer matches, the linked help page is the current map.