Cloudflare Docs
Analytics
Analytics
Visit Analytics on GitHub
Set theme to dark (⇧+D)

Limits

Data accessibility

The GraphQL Analytics API is available to all Cloudflare users; however, users on larger plans have access to a greater selection of datasets and can query over broader historical intervals.

Data node access (by customer plan)

Use the table below to identify which data nodes are included in your customer plan and the range of historical data you can query. For example, Free plans have access to the last 14 days of firewallEventsAdaptive data, while Enterprise plans have access to the last 30 days.

Data nodeFreeProBusinessEnterprise
dosdNetworkAnalyticsAdaptiveGroupsn/an/an/a90 days
dosdAttackAnalyticsGroupsn/an/an/a90 days
firewallEventsAdaptiveByTimeGroups14 days14 days30 days30 days
firewallEventsAdaptiveGroupsn/a3 days30 days30 days
firewallEventsAdaptive14 days14 days30 days30 days
firewallRulePreviewGroupsn/an/an/a30 days
flowtrackdNetworkAnalyticsAdaptiveGroupsn/an/an/a90 days
healthCheckEventsGroupsn/a3 days30 days90 days
healthCheckEventsn/a3 days30 days90 days
httpRequests1dByColoGroupsn/an/an/a365 days
httpRequests1dGroups365 days365 days365 days365 days
httpRequests1hGroups3 days7 days30 days90 days
httpRequests1mByColoGroupsn/an/an/a7 days
httpRequests1mGroupsn/a24 hours3 days7 days
ipFlows1mGroups*n/an/an/a30 days
ipFlows1hGroups*n/an/an/a6 months
ipFlows1dGroups*n/an/an/a1 year
ipFlows1mAttackGroups*n/an/an/a1 year
loadBalancingRequestsGroupsn/a3 days30 days30 days
loadBalancingRequestsn/a3 days30 days30 days
magicFirewallNetworkAnalyticsAdaptiveGroupsn/an/an/a90 days
magicFirewallSamplesAdaptiveGroupsn/an/an/a7 days
magicTransitNetworkAnalyticsAdaptiveGroupsn/an/an/a90 days
spectrumNetworkAnalyticsAdaptiveGroupsn/an/an/a90 days
synAvgPps1mGroupsn/an/an/a7 days
rumPerformanceEventsAdaptiveGroups6 months6 months6 months6 months
rumPageloadEventsAdaptiveGroups6 months6 months6 months6 months
rumWebVitalsEventsAdaptiveGroups6 months6 months6 months6 months

* These nodes are deprecated. Refer to Deprecated data nodes for more information.

Query settings for account limits

To obtain specific information regarding account limits for a particular data node, use the settings node.

The example query below demonstrates how to retrieve account limits for the firewallEventsAdaptive data node. The example queries the following fields:

FieldDescription
enabledReturns true if the dataset (node) is available for the current plan.
maxDurationDefines the maximum time period (in seconds) that can be requested in one query (varies by data node).
maxNumberOfFieldsDefines the maximum number of fields that can be requested in one query (varies by data node).
maxPageSizeDefines the maximum number of records that can be returned in one query (varies by data node).
notOlderThanLimits how far back in the record a query can search (in seconds, varies by dataset and plan).

Example query

{
viewer {
zones(filter: { zoneTag: $zoneTag }) {
settings {
firewallEventsAdaptive {
maxDuration
maxNumberOfFields
maxPageSize
enabled
notOlderThan
}
}
}
}
}

Response

{
"data": {
"viewer": {
"zones": [
{
"settings": {
"firewallEventsAdaptive": {
"enabled": true,
"maxDuration": 259200,
"maxNumberOfFields": 30,
"maxPageSize": 10000,
"notOlderThan": 2678400
}
}
}
]
}
},
"errors": null
}

Query limits

In addition to access restrictions, there are limits on the volume of data that a query can return, and there are user limits on daily data volume. The following limits apply in addition to the general rate limits enforced by the Cloudflare API:

  • A zone-scoped query can include up to 10 zones.
  • Account-scoped queries can aggregate data for up to 1,000 zones — queries that involve aggregated data across more than 1,000 zones return with an error.
  • Queries can request up to 30 fields — this limit is indicated by maxNumberOfFields in settings.
  • Responses can return up to 10,000 records — this limit is indicated by maxPageSize in settings.

Queries must explicitly specify the upper bound of records to return, using the limit argument, as in the following example.

{
viewer {
zones(filter: { zoneTag: $zoneTag }) {
firewallEventsAdaptiveGroups(
limit: 100
filter: {
datetime_geq: "2019-10-16T21:08:00Z"
datetime_lt: "2019-10-16T21:12:00Z"
}
orderBy: [datetime_ASC]
) {
count
dimensions {
datetime
}
}
}
}
}