# Requesting Google Analytics’ API
# Request
Use the craft.analytics.api
method to request the Google Analytics Data API (opens new window) from your templates and show reporting data on the front-end.
{% set response = craft.analytics.api({
sourceId: 1,
startDate: date('-1 year')|date("Y-m-d"),
endDate: 'today',
metrics: 'sessions',
dimensions: 'firstUserSource',
orderBys: {
dimension: {
dimensionName: 'firstUserSource',
},
desc: true,
},
offset: 0,
limit: 10,
dimensionFilter: {
notExpression: {
filter: {
fieldName: 'firstUserSource',
stringFilter: {
value: '(not set)',
matchType: 'EXACT',
},
},
}
},
}).send() %}
# Options
You can customize the request using the following options:
# sourceId
The source ID.
# startDate
Start date for fetching Analytics data. Requests can specify a start date formatted as YYYY-MM-DD, or as a relative date (e.g., today, yesterday, or 7daysAgo). The default value is 7daysAgo.
# endDate
End date for fetching Analytics data. Request can should specify an end date formatted as YYYY-MM-DD, or as a relative date (e.g., today, yesterday, or 7daysAgo). The default value is yesterday.
# dimensions
A comma-separated list of Analytics dimensions. E.g., 'firstUserSource,country'.
# metrics
A comma-separated list of Analytics metrics. E.g., 'sessions,screenPageViews'. At least one metric must be specified.
# orderBys
An OrderBy (opens new window) object that specifies the sorting order of the result.
# offset
The first row of data to retrieve, starting at 0. The default value is 0.
# limit
The maximum number of rows to include in the response. The default value is 10,000.
# dimensionFilter
A FilterExpression (opens new window).
# metricFilter
A FilterExpression (opens new window).
# keepEmptyRows
If set to false
, the response does not include rows if all the retrieved metrics are equal to zero. The default is false
which will exclude these rows.
# Response
{% if response.success %}
<table class="table">
<thead>
<tr>
<th>Page Path</th>
<th>Source</th>
</tr>
</thead>
<tbody>
{% for row in response.report.rows %}
<tr>
<td>{{ row.dimensionValues[0].value }}</td>
<td>{{ row.metricValues[0].value }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
Error: {{ response.errorMessage }}
{% endif %}