Read your storefront's traffic
See your storefront's visits and where your customers came from, count another site's visits and check how your forum fares in search.
In the dashboard
The Traffic page, under Growth, shows how people use your storefront over a range of days: how many visits it had, which pages they read and how many visitors became customers. Owners and admins also find Acquisition under Growth, which shows where your customers came from and what your ads returned, and Forum search, which shows how your community forum's threads and member pages fare with search engines. Today's figures and the visitors with the storefront open stay on the Overview page.
Before you begin
Section titled Before you begin- Every member can read Traffic. Acquisition and Forum search need the owner or admin role.
- Your storefront counts its own visits. To count the visits to another site of yours, add the tracking script to it, as Count the visits to another site describes.
Read the visits
Section titled Read the visits- In the dashboard, open the organization, then Growth, then Traffic.
- In the Storefront visits card, choose 7 days, 30 days, 90 days or 12 months. Every card on the page follows that range, and the range stays in the page's address, so a link or a reload opens the same view.
Storefront visits adds up the range's Sessions, Page views, Conversions and Conversion rate. A conversion is a visitor's first sign-in as one of your customers, and the rate compares conversions with the visitors in the range. Below it:
- The visits table has a row for each day, with its Sessions, Visitors, visits by customers who were Signed in, Page views, Average visit, Bounce rate and Conversions. Over 90 days it has a row for each week, and over 12 months one for each month. A bounce is a visit that left after one page. A narrow screen keeps the sessions, page views and conversions, and leaves the other columns out.
- Top pages lists the most viewed pages, busiest first, with their Views, Sessions and Time on page. It shows 25 at a time. When there are more, the foot of the card says which pages you are reading out of how many, and Next and Previous move through them.
- Before converting shows what visitors did before their first sign-in as a customer, on average: the Days from first visit, the Visits before and the Pages before.
The page counts days in UTC, so a day starts at midnight UTC. To count days in your own time zone, use the API as Count days in your time zone describes.
Read where customers came from
Section titled Read where customers came fromAcquisition adds up where your storefront's visits, sign-ups, orders and revenue came from, so you can see which channels, campaigns and pages bring customers who buy. It needs the owner or admin role, and your storefront has to run on Coritan so that its tracker records each visit.
- In the dashboard, open the organization, then Growth, then Acquisition.
- In the Acquisition card, choose 7 days, 30 days, 90 days or 12 months. Every card on the page follows the range.
- When customers paid you in more than one currency, a second switch lists each currency. Money is never added across currencies, so the page shows one at a time, starting with the one that earned the most.
The range, the currency and your choice of Last touch or First touch stay in the page's address, so a link or a reload opens the same view. The page counts days in your organization's time zone, which you set as Timezone under Invoicing in Settings.
The figures
Section titled The figuresThe top card shows six figures. Under each one it shows the change from the period just before, which has as many days as the range you chose.
- Visits
- The visits to your storefront, with robots left out.
- Sign-ups
- The customer accounts made on your storefront. A customer your team added in the staff console does not count.
- Orders
- The orders placed on your storefront that are not free and whose invoice is paid.
- New customers
- The orders that are a customer's first paid order.
- Revenue
- The invoice total of those orders without tax, in the currency you chose.
- Conversion rate
- Orders divided by visits. Its change is in percentage points.
Each order is credited to the channel of the customer's last visit before they ordered, which is its last touch.
The tables
Section titled The tablesEach table shows its ten busiest rows. The figures at the top always cover every row.
- Channels
- Each channel with its Visits, Sign-ups, Orders, New customers, Revenue and Share of orders. Last touch credits the channel of each customer's last visit before ordering. First touch credits the channel of the visit that first brought the customer, so it shows the channels that start a customer's journey, such as search or social media, which a last touch table tends to give to Direct.
- First touch to last touch
- The pairs of channels behind your orders: the channel a customer first came through, the channel they ordered after, and the Orders and Revenue for the pair. A pair with the same channel on both sides is a customer who ordered through the channel that first brought them. A pair with two channels is a customer who came back another way before they bought.
- Sources
- The site and medium each visit came from, as its link names them, with the channel we filed it under.
- Campaigns
- The campaigns named in the
utm_campaigntag of your links. Add the tag to the links of your ads and emails to see them here. - Landing pages
- The first page of each visit. The path has no query string, and a page in another language counts with the page it translates.
- Devices
- The kind of device each visit and order came from: desktop, mobile, tablet or unknown.
- How customers heard about us
- What customers answered when your storefront asked how they first heard about it after an order, with each answer's share of the answers.
- Ad click IDs
- How many orders arrived with the click ID an ad platform adds to its links, and the ad network of each. An ad platform uses the click ID to match a sale to the ad that brought the visitor.
- Return on ad spend
- What each ad platform cost and what it brought back in the chosen currency: Spend, Clicks, Orders, New customers, Revenue, CAC and ROAS. CAC is the spend divided by the new customers, and ROAS is the revenue without tax divided by the spend. The card shows No ad spend in this range until you connect an ad platform or enter spend by hand on the ad spend page.
We keep each visit for 180 days. When the range starts before that, a notice says Visits are partial in this range: orders and sign-ups are still counted in full, but the visits, and the conversion rate worked out from them, are not.
How customers and orders are attributed describes what the report counts and the API call that returns it.
Count the visits to another site
Section titled Count the visits to another siteThe Tracking script card at the bottom of the Traffic page holds a snippet of HTML for a site that does not run on Coritan, such as a blog.
- Select Copy snippet.
- Paste it just before the closing
</body>tag on each page of the site. The script only runs on pages served over HTTPS.
The site's visits then count on the Traffic page and on Overview, together with the storefront's.
A page is counted only when it loads the tracking script. A storefront on App Deployment or on its own domain loads the script from the API as /t/script.js?org=<slug>, and is counted the same way as one that runs on Coritan.
What a page left open counts as
Section titled What a page left open counts asThe live figures count a visitor for as long as any tab of their visit is open, whether the tab is in front or in the background, and for 5 minutes after the last tab stops reporting. A tab in front reports every 30 seconds, and a hidden tab about once a minute. A hidden tab does not change the visit's length, bounce rate or exit page.
These limits apply:
- A phone suspends a background tab. iOS does it almost at once, and Android Chrome after about 5 minutes. A page script cannot report from a suspended page, so that visitor drops off 5 minutes after the tab was suspended.
- A tab the browser discards, for example when Chrome's Memory Saver frees memory, counts as closed.
- A page the tracking script does not load on is not counted.
What the tracker records
Section titled What the tracker recordsThe tracker is the script that counts visits on your storefront. It sets three cookies on your storefront's own domain, and the cookie banner sets a fourth when a visitor makes a choice (see Add analytics and ad tags). Visits are kept in your organization's records and are not sent to any other site.
| Cookie | Lasts | What it holds |
|---|---|---|
_ct_sid |
30 minutes after the visitor's last activity | A random ID for one visit. Every page view and every heartbeat from a visible tab renews it, so a visitor who keeps a page open and in front stays in one visit. A hidden tab does not renew it, so it can run out while the tab stays open. The visitor is still counted as live. |
_ct_vid |
1 year | A random ID for the browser. A returning visitor counts as one visitor across visits. |
_ct_attr |
90 days | The first time the visitor arrived, and the latest time they arrived from somewhere other than a direct visit. Each holds the campaign tags, the referring site, any ad click ID and the page they landed on. Only our servers can read it. |
_ct_consent |
6 months | The visitor's choice in the cookie banner. |
For each visit the tracker keeps:
- The page the visitor landed on, the site that sent them, and the tags on the address:
utm_source,utm_medium,utm_campaign,utm_term,utm_contentandutm_id. - Any ad click ID on the address:
gclid,gbraid,wbraidanddclid(Google),fbclid(Meta),ttclid(TikTok),msclkid(Microsoft),rdt_cid(Reddit),twclid(X),li_fat_id(LinkedIn),epik(Pinterest) andsccid(Snapchat). A visit with a click ID, or with autm_mediumofcpc,ppc,paid,paid-social,display,retargeting,cpmorbanner, counts as paid. - The visitor's country, region and city, worked out from their address, and their browser, system, device type, language, screen size and time zone.
- The pages they view, how long they stay on each, and the clicks and form submissions your storefront reports.
The tracker leaves some requests out. It never counts robots, requests a browser makes in advance to load a page faster, or requests for images, scripts and data. A visitor who moves from one page of your storefront to another does not make your storefront a new source, and neither does one who comes back from a payment or sign-in page. A link's secret, such as token or code, never reaches the stored address.
We keep page events for 90 days and visits for 180 days. 30 days after a visit, the stored address is cut to its network: 203.0.113.10 becomes 203.0.113.0, and an IPv6 address keeps only its first three groups.
Check how the forum fares in search
Section titled Check how the forum fares in searchWe score every thread and member page on your storefront's community forum against an indexing policy. Only the pages that pass go in the sitemap that search engines read, and the best of them also go in llms.txt, the list that AI assistants read.
- Open the organization, then Growth, then Forum search.
- Search indexing shows, for Threads and for Member pages, how many are Indexed out of the total, how many are In llms.txt, their Average score and the Score to be indexed.
- Why threads are held back lists the reasons the policy keeps threads out of search, most common first.
- Indexing policy lists the bars a page has to clear, such as the Wait before indexing for a thread and the Fewest posts for a member page. Our support team sets the policy, so ask them when a bar does not suit your forum.
- To score every page again, for example after you clean up old threads, select Rescore now at the top of Search indexing.
To find out why one member page stays out of search, enter the member's handle in Member handle under Check a member page, then select Check page. The handle is the last part of the member page's address. The answer shows the page's Score out of 100, the score it needs, each reason that holds it back, and the points it earned for each part of the score.
Moderate the forum, at the foot of Search indexing, opens the staff console on your storefront's domain, where your team handles reports, suspensions and hidden threads. The button shows once your organization has a custom domain.
Troubleshooting
Section titled Troubleshooting- "No community forum yet"
- Your storefront has no community forum, so there is nothing to index. Ask support to turn it on.
- "No member has that handle. Check the spelling and try again."
- No member of your forum has that handle. Copy it from the end of the member page's address.
- Growth has no Acquisition or Forum search, or their links open Overview
- Your role does not include them, because only owners and admins see them. Ask the owner or an admin.
- Acquisition says No visits or orders in this range
- No visitor reached your storefront and nobody ordered in the range. Choose a longer range, and check that your storefront runs on Coritan, which is how its tracker records visits.
- A campaign you run is missing from Campaigns, or its orders are in Direct
- The links of the campaign carry no
utm_campaigntag, or a browser removed it. Addutm_source,utm_mediumandutm_campaignto the links of your ads and emails. - Return on ad spend shows CAC and ROAS as a dash
- A dash means the figure has nothing to divide by: no spend, or no new customers. An ad account that bills in one currency and customers who pay in another also give no figure, because spend and revenue are only compared in the same currency.
- The tables stay empty
- No visitor reached a page that counts visits in the range. Choose a longer range, or add the tracking script to a site that does not run on Coritan.
Related
Section titled Related- Read your organization's overview
- How customers and orders are attributed
- Connect ad accounts and see what ads return
- Run a community with a server list, forum and guides
- The staff console
With the API
Section titled With the APIAny member can read the traffic routes. The forum routes take the owner or admin role, and answer 404 while your storefront has no forum. The paths are under /api/v1/orgs/acme.
| Operation | What it returns |
|---|---|
GET /tracking/stats |
One row for each period between start_date and end_date (both YYYY-MM-DD). granularity is hourly, daily (the default), weekly or monthly. Days start at midnight UTC unless you pass tz. |
GET /tracking/today |
The visits since the day began: total_sessions, unique_visitors, authenticated, guests, page_views, avg_duration_seconds and bounce_rate_percent. The day starts at midnight UTC unless you pass tz. |
GET /tracking/live-view |
The visitors with the site open, for a live map: active, and each visitor's current page, landing_page, pages, device, browser, os, source (its UTM source, else the referring site, else direct), whether it is a signed-in customer, started_at, last_activity_at and location (country_code, region, city, and latitude and longitude to a tenth of a degree). A visitor is active while any tab of its visit is open, visible or hidden, and for minutes (1 to 30, 5 by default) after its last tab stops reporting. A visible tab sends a heartbeat every 30 seconds and a hidden one about once a minute, and a tab the browser suspended or discarded stops reporting. Each person is counted once, and active counts everyone even when visitors lists the 10,000 most recent. totals counts the listed visitors by country, city, page, source and device. No address or email is answered. |
GET /tracking/pages |
The most viewed pages between start_date and end_date, with views, unique_views and avg_time_seconds. Pages with the same views sort by hostname, then path. page and per_page (50 by default, at most 100) page through them, and the answer carries them back beside total, the number of pages in the range. |
GET /tracking/conversions |
How many visitors became customers between start_date and end_date (total_conversions), the conversion_rate_percent, and the average days, sessions and pages it took. |
GET /tracking/script |
The tracking script for another site: snippet, a <script> tag, and script_url. |
GET /admin/community/forum/seo |
The forum's figures: threads and profiles, each with total, indexable, llms and average_score, then exclusion_reasons and the policy. |
POST /admin/community/forum/seo/rescore |
Scores every thread and member page again, and answers with threads_scored, threads_indexable, profiles_scored and profiles_indexable. |
POST /admin/community/forum/seo/preview |
Scores one thread or member page, named by the thread_id or handle query parameter, and answers with its score, tier, components, weights and the reasons in explained. |
curl "https://api.coritan.com/api/v1/orgs/acme/tracking/stats?start_date=2026-08-01&end_date=2026-08-31&granularity=weekly" \
-H "Authorization: Bearer $CORITAN_TOKEN"
The script counts page views, referrers and devices, and follows navigation in single-page apps. It also sends a heartbeat every 30 seconds while a page is visible, about once a minute while it is hidden, when a hidden page is shown again and when a page closes. The visitor stays counted as live until 5 minutes after the last one. Only the platform's staff can change the forum's indexing policy.
Ask a visitor for consent
Section titled Ask a visitor for consentA storefront that runs on Coritan answers two routes at its own address, for the cookie banner and for any page of your own that needs the same answer. They need no sign-in, and their answers are never cached.
| Operation | What it does |
|---|---|
GET /t/consent |
Says whether the visitor must be asked, what applies until they choose, and what they chose. |
POST /t/consent |
Records the visitor's choice, sets the _ct_consent cookie and answers like GET. |
curl https://store.example.com/t/consent
{
"required": true,
"default": { "analytics": false, "marketing": false },
"stored": null,
"gpc": false
}
requiredistruein the European Economic Area, the United Kingdom and Switzerland, and when we cannot tell where the visitor is. Elsewhere it isfalse.defaultis what applies until the visitor chooses. Where a choice is required, both arefalse. Elsewhere both aretrue, except thatmarketingisfalsewhen the browser sends Global Privacy Control.storedis the choice in the visitor's_ct_consentcookie, ornullwhen they have not chosen.gpcistruewhen the browser sentSec-GPC: 1.
POST /t/consent takes { "analytics": true, "marketing": false }, and both must be true or false; anything else is a 422. While the browser sends Global Privacy Control, marketing is stored as false. The answer carries the new choice as stored.
curl -X POST https://store.example.com/t/consent \
-H "Content-Type: application/json" \
-d '{"analytics": true, "marketing": false}'
The cookie is _ct_consent=v1.a1m0: a is analytics and m is marketing, each 1 or 0. It lasts 6 months and scripts on the page can read it.
Count days in your time zone
Section titled Count days in your time zoneBoth GET /tracking/stats and GET /tracking/today count days in UTC. A store that trades in another time zone adds tz, so that a day starts at its own midnight.
tzis an IANA time zone name, such asAmerica/New_YorkorAsia/Kolkata. An old name such asUS/Easternworks, and the answer gives the name it has today. A name we do not know gives a422that namestz.- A day starts at the zone's midnight, daylight saving time included, so a day can last 23 or 25 hours.
start_dateandend_dateare dates in the zone, theperiodof each row is one of those dates, andGET /tracking/todaycounts from the zone's midnight. A visit at 02:30 UTC on 10 October counts on 9 October inAmerica/New_Yorkand on 10 October in UTC. - The answer adds
timezone, the name of the zone it used. Withouttzthe answer has notimezoneand counts in UTC, as it always did. - For a zone other than UTC,
GET /tracking/statscounts each day from the visits themselves, and we keep them for 90 days. It needsgranularity=dailyand astart_datewithin the last 90 days. Hourly, weekly and monthly rows, and an earlierstart_date, give a422that namestz, and for an earlierstart_dateit says the first date you can use. Anend_dateafter today in the zone reads up to today. - A day with no visits has no row. In a zone, each row's
unique_visitorscounts a visitor once for the day, andconversion_countcounts the visitors who became customers that day. tz=UTCanswers as notzdoes, withtimezoneadded, for any granularity and any range.
curl "https://api.coritan.com/api/v1/orgs/acme/tracking/stats?start_date=2026-10-08&end_date=2026-10-09&tz=America/New_York" \
-H "Authorization: Bearer $CORITAN_TOKEN"
The answer holds one row for each day with visits, and names the zone:
{
"rows": [
{
"period": "2026-10-09",
"total_sessions": 120,
"unique_visitors": 96,
"authenticated_visitors": 14,
"guest_visitors": 106,
"total_page_views": 410,
"avg_session_duration_seconds": 142,
"bounce_rate_percent": 38.33,
"conversion_count": 3
}
],
"timezone": "America/New_York"
}
To read today's figures since New York's midnight, call GET /tracking/today?tz=America/New_York. The answer carries the same figures as without tz, and adds "timezone": "America/New_York".
API operations on this page
| Method | Path | What it does |
|---|---|---|
GET | /api/v1/orgs/{org_slug}/tracking/stats | One row for each period between startdate and enddate, both inclusive |
GET | /api/v1/orgs/{org_slug}/tracking/today | Org tracking today |
GET | /api/v1/orgs/{org_slug}/tracking/live-view | The organization's visitors right now, for a live view with a map |
GET | /api/v1/orgs/{org_slug}/tracking/pages | This organization's pages by views, from startdate to enddate |
GET | /api/v1/orgs/{org_slug}/tracking/conversions | Org tracking conversions |
GET | /api/v1/orgs/{org_slug}/tracking/script | Org tracking script |
GET | /api/v1/orgs/{org_slug}/admin/community/forum/seo | Org admin seo summary |
POST | /api/v1/orgs/{org_slug}/admin/community/forum/seo/preview | Score one thread or member against the current policy, showing the working |
POST | /api/v1/orgs/{org_slug}/admin/community/forum/seo/rescore | Org admin rescore |