Docs·Pages
GET
/api/v1/event/analytics/web-analytics/entry-pagesList entry pages
The pages sessions started on, one row per path and hostname, for the sessions that started in the date range: the Entry pages tab of the Pages page. Rows are ranked by entrances unless sortBy and sortDir say otherwise.
Keys: an account key. Getting started explains both kinds.
Parameters
| Prop | In | Type | Notes |
|---|---|---|---|
contactListId | query | string | The id of the audience (the tracked site) to read, a UUID: anything else returns a 400. You must be a member of the workspace the audience belongs to, or the call returns a 401. An id that matches no audience is not an error: the call returns no data. |
startDate | query | string | Start of the date range, read as UTC: a date such as 2026-09-01 (from midnight), or an exact time such as 2026-09-01T09:30:00Z. Use one of these two forms. |
endDate | query | string | End of the date range, read as UTC. A date such as 2026-09-30 includes that whole day; an exact time such as 2026-09-30T18:00:00Z ends the range right before that moment. If the workspace has gone past its plan's event allowance this billing period, the range is cut short at the moment the allowance ran out. |
page | query | number | Page number, starting at 0. |
pageSize | query | number | Rows per page. |
search? | query | string | Keep only entry paths that contain this text, ignoring case. |
filter? | query | string | Narrows the results: a URL-encoded JSON array of conditions, each [key, values, operator], where a missing operator means is. Example: [["country",["US","GB"]],["page",["/pricing"],"startsWith"]] keeps visits from the US or the UK that viewed a page starting with /pricing. Every condition must match, and each key can appear once (a second condition on the same key replaces the first). A condition matches any of its values, except that isNot, notContains and notRegex rule out all of them. Operators: is and isNot (exact), contains, notContains, startsWith and endsWith (ignoring case), regex and notRegex (RE2 syntax, so no lookarounds; a pattern that does not compile returns a 400), and isNull and isNotNull (the value is not set, or is set; send [] as the values). Keys: channel, referrer_source, referrer, utm_source, utm_medium, utm_campaign, utm_term, utm_content, country (a two-letter code), region, city, browser, browser_version, os, os_version, screen_size (Desktop, Mobile or Tablet), hostname, entry_page, exit_page, page and event_name (visits that viewed such a page or sent such an event), identified (["true"] or ["false"]), goal_id (people who completed the goal in the range) and cohort_id (members of a segment). The last two take ids and only is or isNot. Unknown keys, and a filter that is not valid JSON, are ignored rather than refused. |
sortBy? | query | EntryPageSortBy | The column to rank by: entrances (the default, also accepted as visitors), revenue, path, bounceRate or avgSessionDuration. |
sortDir? | query | SortDirection | desc (the default) puts the highest value first, or Z to A for a name or path; asc the reverse. The order covers every page, not just the one returned. |
Response
| Prop | Type | Notes |
|---|---|---|
content | EntryPageRow[] | One row per entry path and hostname. |
size | number | The pageSize you asked for. |
page | number | The page you asked for, counted from 0. |
totalItems | number | Rows across all pages. |
totalPages | number | totalItems divided by size, rounded up. |
Each item in content
| Prop | Type | Notes |
|---|---|---|
path | string | The page path, without query string or trailing slash (the home page is /). |
hostname | string | The hostname the page was on. |
entrances | number | Sessions that started on this page. |
bounceRate | number | Bounced sessions as a percentage of entrances, 0 to 100 with two decimals. A session bounces when it has one page and no interactions, and is marked when it ends. |
avgSessionDuration | number | Average length of those sessions in milliseconds, counting only sessions that have ended. |
revenue | number | Everything the visitors who entered here paid in the range, net, in the reporting currency. A visitor counts on every page they entered on, so rows add up to more than the total. |
Request
curl 'https://app.spreelytics.com/api/v1/event/analytics/web-analytics/entry-pages?contactListId=…&startDate=…&endDate=…&page=…&pageSize=…' \
-H 'Authorization: Bearer YOUR_API_KEY'
const url = new URL('https://app.spreelytics.com/api/v1/event/analytics/web-analytics/entry-pages');
url.searchParams.set('contactListId', '…');
url.searchParams.set('startDate', '…');
url.searchParams.set('endDate', '…');
url.searchParams.set('page', '…');
url.searchParams.set('pageSize', '…');
const res = await fetch(url, {
headers: { Authorization: 'Bearer YOUR_API_KEY' },
});
const data = await res.json();
import requests
res = requests.get(
"https://app.spreelytics.com/api/v1/event/analytics/web-analytics/entry-pages",
headers={"Authorization": "Bearer YOUR_API_KEY"},
params={"contactListId": "…", "startDate": "…", "endDate": "…", "page": "…", "pageSize": "…"},
)
data = res.json()
Response
{
"content": [
{
"path": "string",
"hostname": "string",
"entrances": 0,
"bounceRate": 0,
"avgSessionDuration": 0,
"revenue": 0
}
],
"size": 0,
"page": 0,
"totalItems": 0,
"totalPages": 0
}