Read Performance
Pick a date range and market, then read the Overview against your monthly targets, Google Search clicks, queries and tracked keyword ranks, and how each pillar's social posts did.
Performance shows how a workspace did in Google Search and on social over a date range you pick. Open Performance in the sidebar. The page has six tabs: Overview, Visitors, Search, Social, AI assistants, and AI answers. The filter bar sits under the tabs.
Set the range and filters
- If the workspace has more than one market, pick All markets or one market. Each market shows its country's flag. A market narrows Social to that market's posts, and Search to that market's country when the country is a 2- or 3-letter code. See Read Search. AI answers shows one market at a time: with All markets, it shows your first market that has a location. Visitors and AI assistants cover every market, so the market filter is hidden on those tabs.
- Pick a range. The page opens on Last 30 days. Open the dates control and select Last 7 days, Last 30 days or Last month, or set the From and To dates. The control shows the preset name, or the dates for a custom range.
- To see the previous period next to this one, turn on Compare. It compares with the window of the same length right before your range.
The line under the Performance heading restates the range, and the compare window when Compare is on. Until the workspace has a time zone, it also says dates use UTC.
AI answers shows Mark's latest weekly answer checks, whatever the range, so the dates control, Compare and the range line are hidden on that tab.
Switch tabs
Select Overview, Visitors, Search, Social, AI assistants, or AI answers above the filters. The page opens on Overview. On a phone, the tabs become one menu that shows the open section. Select it to pick another.
When you select a tab, the address in your browser ends with the tab's name, like #social. Share or bookmark that link to open the same tab. The tab stays open when you change the range, market, pillar, or Compare, and when you reload the page.
Printing the page prints all six sections, whichever tab is open. The Overview prints alone on page one, with the range at the top, so a print of Last month works as a monthly report.
Read the Overview
The Overview answers "are we OK?" for the range you picked. Every number is the same number its own tab shows.
The top card has four tiles: Search impressions, Search clicks, Social impressions, and Social engagement. Select a tile to chart that number per day under it. The chart opens on the first tile with something to show. Today is still counting, so its point sits apart from the line, and hovering it reads "(so far)". View and the tab's name, at the top right, opens the tab the picked tile comes from.
- Search impressions and Search clicks: how often your site showed in Google Search, and the clicks it got, from Search Console. Same as the Impressions and Clicks tiles on Search.
- Social impressions and Social engagement: what your social posts gained in the range. Same as the charts on Social.
Below it sit two cards, each with a View button that opens its tab:
- Visits and leads shows Site pageviews, pageviews on your site from your PostHog project (the same pageviews Visitors counts), and Leads (first touch): leads Mark recorded in the range, counted by the page where the visitor first landed and on the same Pacific Time days as Search. These are the leads the Pages tab on Search counts per landing page, for every page, not only the pages listed there.
- Named in AI answers lists each AI engine with its logo, how often its answers named your business in the latest weekly check, and a bar, highest first. It's for the market you picked and matches the tiles on AI answers. It ignores the date range, has no compare, and is never added up into one score.
A market narrows the two Search tiles to its country and picks the market AI answers shows. Site pageviews and Leads cover every market, and with a market picked, Visits and leads says so.
Hover the info icon next to a number for its source and how fresh it is. With Compare on, the numbers also show the change from the previous window, like +12%. Hover the change to see the previous window's figure. A source that isn't connected shows what's missing and a link to fix it, never 0.
Some numbers take a moment longer than the rest, Site pageviews among them. They show a gray placeholder until they load.
KPI targets
When your range is one whole calendar month, or this month from the 1st to today, and a number has a target for that month, the card's line says so and Visits and leads shows the target under each number. Today only Leads can have one: set it on Strategy > Targets. It shows the percent of target, like 85%, with the actual it's based on under it, like "34 of 40": the same figures the Targets page shows. Targets count leads in your workspace's time zone, so near the start or end of a month the actual can differ from the number above it by a lead or two. A number with no target that month says No target. See Set KPI targets.
Read Search
Search shows Google Search Console numbers for the property chosen on the Google connection, in one Search card. The property's address sits under the title. Hover the info icon next to Search for the last day with data, for example "Data through Sep 21, Pacific Time." Google finalizes data 2 to 3 days late.
Google also shares newer days it hasn't finalized. The chart draws them as hollow dots off the line, not joined to anything, and hovering or tapping one says "(preliminary)" and "Google may still revise this day." The info icon then reads, for example, "Final data through Sep 21, Pacific Time. Sep 22 and Sep 23 are preliminary: Google may still revise them." The Overview's Search impressions and Search clicks charts draw them the same way. The tiles, Compare, Queries, Pages and the Overview's totals use final data only, so a preliminary day never changes a number.
If you picked a market, the same info icon says how Search treats it. Search can filter by the market's country only when that country is a 2- or 3-letter code, like DE or DEU. A name like "Germany" or "DACH" doesn't filter, and neither does "UK". Use GB for the United Kingdom.
- If the country is a code, the tiles, Queries, and Pages are for that country. Tracked rank only shows checks run in that country, so a query tracked only in the US has an empty cell under a DE market. For a market with country DE, the hint says "Shows searches from DE only."
- If it isn't, Search covers all markets. For a market called DACH, the hint says "Covers all markets: Search filters by country only when DACH's country is a 2- or 3-letter code like DE or DEU." Change the country on Strategy > Markets.
Inspect a URL, at the top right, opens your main site's Indexing tab under Presence > Websites, to check how Google indexes one page.
Tiles and chart
The four tiles show Clicks, Impressions, CTR, and Average position for the range. Select a tile to chart that number per day under it. The chart opens on Clicks. On the Average position chart, #1 is at the top, so a line going up means a better position.
With Compare on, Clicks and Impressions also show the change from the previous window, like +12%. CTR and Average position show the previous window's figure as "vs" and the number.
The table
Under the chart, one table has three tabs: Queries, Pages, and Tracked keywords, with the number of tracked keywords in brackets. Each tab has a search box that filters its rows as you type. Hover the info icon next to it for what the tab lists.
Every tab works the same way:
- Select a column heading to sort by it. Select it again to flip the order.
- The table shows 10 rows at a time. Pick more under Rows per page, and use the page numbers to move through the rest.
- On a phone, each row is a card. Use Sort by above the cards to sort.
Queries
Queries lists the top 100 search queries by clicks, with Clicks, Impressions, CTR, and Position. Google hides some queries for privacy, so the rows don't add up to the totals in the tiles.
Use View to pick which queries show. The number next to each choice is how many there are.
- Top queries: the top 100 by clicks. This is where the tab opens.
- Positions 5 to 20: queries that rank on positions 5 to 20, sorted by impressions. These already rank, just not near the top, so they're the cheapest to move up.
- 7+ words: every fetched query of seven or more words, by clicks, with the page that got the most clicks for it under the query. People often type these the way they'd ask an AI assistant. Save as target adds a query to Research › Keywords exactly as Google reported it, with case and punctuation kept, so a brief can use the exact wording. It is saved for your first active market, or United States / English when no market sets a location and language. A query that's already saved there, in any casing, shows Already saved and keeps the wording it was first saved with.
If Mark tracks keywords for the first site listed under Websites, Top queries and Positions 5 to 20 have a Tracked rank column. This is Mark's own Google rank check, not Search Console. It shows the latest position, with an arrow beside it for the move since the previous check: see Read the table. That move is not tied to the date range you picked. The info icon says when the check last ran.
Pages
Pages lists the top 100 pages by clicks, with Clicks,
Impressions, and Position. Pages on your site show as their path,
like /pricing; the info icon names the site. Google counts each page on its
own, so a search that shows two of your pages counts for both, and the rows
don't add up to the totals.
Two more columns show which pages turn search visits into leads:
- Leads counts the leads created in the range whose first visit landed on that page. Like the clicks, the days are Pacific Time. A page with no leads shows 0. Leads that landed on a page outside the list aren't shown.
- Conversion is those leads divided by the page's clicks. A page with no clicks shows a dash.
Mark matches a lead to a page by its address without the www., the query
string, or a trailing slash. A lead that landed on
example.com/pricing/?utm_source=google counts toward example.com/pricing.
A chip next to the page flags the ones worth a look. Both compare the page to the site median, the middle conversion rate of the listed pages with clicks.
- Leak: 50 or more clicks, and no leads or a rate below the site median. Visitors arrive and leave without getting in touch.
- Write more like this: 2 or more leads and a rate at least twice the site median. Write the next piece in the same vein.
Most pages get no chip. Select the Conversion heading to put the best converting pages first, by rate and then by leads. That's the list of what to write next. If no leads came in during the range, every row shows 0 and the info icon on Leads says so.
Tracked keywords
Tracked keywords lists every keyword you track with its latest Google position, an arrow for the move since the previous check, and the page that ranked. Select a keyword for its history. Run now starts a check. Change schedule opens Research > Keywords, where you set checks to weekly. It opens on your main site, in the picked market's country when that country is tracked; pick another site or locale at the top of the tab. Changing the market resets a locale you picked. With nothing tracked, the tab shows one line that links to Research > Keywords instead. See Check your keyword rankings.
Open one page
Select a page on the Pages tab to open everything Mark knows about it on one screen. The page view keeps your dates, Compare, and market, and has the same controls at the top. Open page opens the live page in a new tab, and Back to Search returns you to the Search tab.
The same view opens from other places that list your pages:
- a Ranking URL in Tracked keywords;
- a Yours page in Cited pages, or a Yours or Your answer page citation in a question's AI answers;
- a page in the site audit, from By page or a check's affected pages.
From Performance it keeps your dates, Compare, and market. From the site audit it opens with the default dates. Your browser's back button returns you to where you came from.
The view has six blocks. The info icon next to a block's title says how fresh its data is, and each block says why when it has nothing to show. A block never shows 0 for a source it couldn't read. If one block fails to load, it says so and the others still show.
- Search Console: clicks, impressions, CTR, and average position for the page, with the previous window when Compare is on, and its top 100 queries. Google groups a page's data under its canonical address, so these can differ a little from the page's row on Pages. Empty when Google isn't connected or no property is chosen.
- Tracked keywords ranking with this page: each keyword you track whose latest rank check found this page, with its rank and market. Empty when no keywords are tracked, no rank check has finished yet, or none ranked with this page last time.
- Site audit issues: the issues the latest finished audit found on this page, most severe first, with a link to the site's audit. Empty when no site in the workspace has this page's host, the site has no finished audit, or the page wasn't in the latest one.
- Mark posts for this page: posts published at this address, and posts with a tracking link to it. Each says which. Only social posts get tracking links. Blog posts, FAQs, and competitor pages keep links to your own site as written, so they show here only when published at this address. Empty when no Mark post is published there or links to it with a tracking link.
- Leads (first touch): the same lead count, conversion rate, and chip as the page's row on Pages. Leads come from your Leads list and count by the page where the visitor first landed. When none came in during the range, the block says "None recorded in this range" and the rate reads n/a. The block also shows Site tag leads: form submissions your site tag sent to PostHog, counted by the page the visit started on. It sits beside Mark's leads and is never added to them, or to the rate. When PostHog isn't connected, hasn't received events yet, or didn't answer, the figure says which instead of showing 0.
- Cited in AI answers: buyer questions whose AI answer checks in the range cited this page, with the engines and market. Empty when no buyer questions are tracked, or no check ran in the range.
A page outside your workspace shows "Page not in this workspace" with Back to Search. The page has to be on your Search Console property, or on one of your sites when no property is chosen.
When Search shows no numbers
If Google isn't connected or can't be read, Search shows a message instead of numbers. For example, "Connect Google to see search clicks and impressions." Other messages cover a connection without Search Console access, no Search Console property chosen, and revoked access. Fix these in Connections > Google. The message links there.
If Search Console doesn't answer, Search says so. Reload the page to try again.
Read Social
Social shows what your social posts gained during your range. That includes posts published before the range that were still getting impressions in it.
Between the charts and the table, pick how to group the rows:
- By pillar, the default, compares pillars. Pillars are the content themes set under Strategy > Messaging. Each pillar with posts in the range has a row, plus a No pillar row. The number in brackets next to a pillar's name, and next to Total, is how many posts were published in the range, so a pillar can list more posts than that number.
- All posts ranks posts against each other. Each post has its own row, with its Pillar beside it.
Both views start sorted by Impressions, highest first. Select a column heading to sort by it instead, or on a phone pick the column from the Sort by menu. Switching views goes back to that sort and collapses any open pillars. Total sits under the table in both views.
Two charts sit above the table: Impressions gained per day and Engagement gained per day. Each plots every day of the range, with 0 on a day nothing was gained, and shows the range's total above the line. The charts count social posts only, so with a blog post in the range the Total for Impressions is higher than the chart's figure.
The columns are:
- Impressions and Engagement: how much each post's numbers rose on days in the range. Engagement is likes, comments, shares and saves. Mark reads a post's metrics daily for 30 days after it's published, then weekly until 90 days, then stops. When readings are days apart, Mark spreads the rise evenly over the days between them. LinkedIn Articles and X posts follow the same schedule. After you connect X, its posts can take a few hours to get their first numbers. A post with no reading yet shows a warning icon next to it, and so do its pillar and Total; hover it to see how many posts are still waiting.
- Tracked clicks: visits through the tracked link Mark puts in the post, in the range. Known bots are left out.
- Pageviews: views of a blog, FAQ or competitor page on days in the range, from the site tag in PostHog. Social posts read n/a, and so does a pillar or Total with only social posts. Without PostHog connected, website posts read 0.
Posts that Mark measured only at day 1 and day 7, from before daily readings began, are understated: they show nothing gained after day 7.
Blog posts are measured differently. A blog post's Impressions and Tracked clicks are Google Search impressions and clicks for its page in the range, from Search Console. With a market picked, they count searches from that market's country only, the same rule as Read Search. Google lands its data 2 to 3 days late, so a new post reads 0 at first. Without Search Console connected, blog posts show 0. A blog post with pageviews in the range counts as measured even without Search Console. An older blog post with pageviews in the range is listed too, marked "published before range".
A blog post has no engagement, so its Engagement reads n/a. A pillar with only blog posts reads n/a too, and so does Total when every post is a blog post. In a pillar that mixes blog and social posts, Engagement is the sum of its social posts.
Hover the info icon next to Social, Impressions, Engagement, Tracked clicks or Pageviews for a short version of what each counts. The info icon next to Social also starts with how fresh the metrics are: "Data through" and a date, or "No checkpoints yet".
To narrow the table, use the pillar filter at the top of the section. Pick All pillars, one pillar, or No pillar. The market filter under the tabs also applies here.
See each post
- In By pillar, select the arrow next to a pillar to expand it. To see every post in one list instead, select All posts.
- Each post shows its channel icon and title, with its own numbers. A post with media shows its thumbnail at the end of the line. A post published before the range is marked "published before range". In By pillar, a pillar's posts add up to its row.
- Select the post to open it in Mark. Select the external-link icon next to it to open the live post on the channel.
Opening a published social post shows its Performance panel. It has an Impressions chart and an Engagement chart over days since publish, and a table of every reading, newest first. Each reading is the total the platform reported at that time; Social counts how much those totals rose during your range. A recount can make a later reading lower, and Mark shows it as reported. With one reading there's only the table, and before the first reading the panel says "No readings yet".
A published blog, FAQ or competitor page has its own Performance panel. Once a day Mark counts the page's views and form submissions from the site tag, for each calendar day in your workspace's time zone. A submission counts on the page the visit started on, the same way Performance › Pages counts site tag leads. The panel has a Pageviews chart and a Submissions chart once there are two days, a table of each day, newest first, and "Data through" with the last day counted. Mark recounts the last 7 days every day, so a recent day's numbers can rise a little and a missed day fills in later. The first day shows up the day after the page goes live. It needs PostHog: without it the panel links to Connections instead. Pageviews also show in the Social table's Pageviews column. Submissions don't, and neither number counts toward your targets.
Compare with the previous window
With Compare on, Impressions, Engagement, Tracked clicks and Pageviews each show the change from the previous window, for each pillar and the total. A rise shows in green, for example +12%, and a fall in red, for example -8%. Posts don't show a change, so in All posts only Total does. A rise from 0 in the previous window reads new, and no change reads 0% in grey. An Engagement or Pageviews cell that reads n/a shows no change. Hover a change to see the previous window's number, for example "vs 340". Both chart totals show their change too.
If no social post was published or gained anything in the range, Social says "No social posts published or measured in this range."
Why Social doesn't match LinkedIn or X
If you line up a post's numbers in Mark against the platform's own post analytics, expect them to differ:
- Impressions and engagement trail by up to a day. They come from Mark's readings of the platform's counts, and Mark reads each post about once a day. A post that got its first impression after the last reading shows 0 in Mark until the next one.
- Tracked clicks are Mark's count, not the platform's. Mark counts each visit through its tracked link before sending the visitor on to your page. LinkedIn and X count clicks their own way, so the two rarely agree.
- Link scanners can add clicks to a new post. Platforms and security tools open a link as soon as it's posted. Mark leaves out the ones that say they're bots, but some look like a normal browser and still count. They show up in the first minute or so after a post goes live. A new post can show a few clicks in Mark while the platform shows none.
- Tracked clicks don't match Google Analytics either. Mark counts the visit when the tracked link is opened. Google Analytics counts it only if your page loads and its tag runs.
Read AI assistant traffic
The AI assistants tab shows AI assistant traffic. It counts fetches of your pages by assistants like ChatGPT, Claude, and Perplexity in the range, with the top pages. It needs a tracking file on your site. See Track AI assistant traffic to install it and to read what each kind means.
Under it, AI referrals counts people who opened your site from a link in an assistant's answer, by country. It needs only the site tag. See Read AI referrals.
Read AI answers
The AI answers tab shows how ChatGPT, Gemini, Google AI Overview, Google AI Mode, Claude, and Perplexity answered your buyer questions in the latest weekly check, for one market. It ignores the date range. See Track AI answers for what each badge means.
Read Visitors
The Visitors tab shows which countries your site's visitors came from in the range. It reads pageviews from your PostHog project, so it needs PostHog connected and its snippet on your site. It covers every market, so the market filter is hidden on this tab.
The figures at the top show total Visitors, how many Countries they came from, and the Top country with its share. The map shades each country by its visitors: the darker, the more. Hover over a country to see its count. The table lists the top 10 countries with visitors, share, and pageviews.
A visitor is one person as PostHog tracks them. Someone who visits from two countries in the range counts once in each.
Unknown location counts visitors PostHog couldn't place. That happens when:
- PostHog's GeoIP setting is off in your PostHog project.
- The visit came in PostHog's cookieless mode, for example on a site that tracks without cookies until a visitor consents. PostHog drops those visitors' IP addresses, so it can't tell where they are. A note under the table says how many of the unknown visitors were cookieless.
- A reverse proxy in front of PostHog doesn't pass on visitor IP addresses. Every visitor then shows up in the proxy's country instead. If one country holds nearly all your visitors and that looks wrong, check your proxy.
When PostHog can't be read
Site pageviews on the Overview, the Visitors tab, and the AI referrals card all come from one read of your PostHog project. If that read fails, they show one of these messages instead of a number. They never show 0 for a failed read.
| Message | What it means |
|---|---|
| "PostHog didn't answer in time. Reload in a minute." | PostHog was busy: it didn't answer within 15 seconds, or said it was overloaded. PostHog runs only a few queries at once for each project, so reloading again and again can keep it busy. Wait a minute, then reload once. Your PostHog connection is fine. |
| "Couldn't read pageviews from PostHog. Open the PostHog connection." (Overview) or "Could not read visitor locations from PostHog. Check the PostHog connection, or reload in a few minutes." (Visitors, and "AI referrals" on the card) | Mark couldn't read your PostHog project for a reason other than a timeout, for example because Mark lost access to it. If the PostHog connection shows a problem, fix it there. Otherwise reload in a few minutes. |
Published posts in PostHog
When PostHog is connected, Mark sends one post_published event to your
PostHog project each time a post goes live. That covers social posts and
posts published to your website's CMS. Chart it in PostHog next to your
traffic and leads to see how posting cadence lines up with them.
Each event's distinct ID is post: followed by the post's ID. Its
properties are:
postId,orgId, andchannel.angleIdandangleName,personaIdandpersonaName,pillarIdandpillarName,marketIdandmarketName. A post without one of these has null for both, so PostHog shows it as its own group.url: the live post's address.publishedAt: when the post went live.provider:zerniofor social posts, or the CMS for website posts, likepayload.
A post sends the event once, the first time it goes live. Checking its status again doesn't send another, and neither does editing and approving a live website post again. Posts imported from a connected social account weren't published by Mark, so they don't send one.
When you connect or attach PostHog, Mark sends one event for each social or
website post it published before that day, dated to when the post went live, so your chart
shows your earlier posts too. Those events carry backfilled: true, so you
can filter them in or out. Mark can't remove them from your project once
they're sent. If your workspace connected PostHog before Mark sent these
automatically, contact support and Mark can send them for you.
Last updated Nov 10, 2026