The key pages of a company website show how it expects to be bought. A pricing page and a free trial point to buying without a conversation; a demo and a contact-sales page point to one. This guide shows how to turn those pages, the markets and currencies a site declares and the message in its banner into dated events, how to classify them, and how to tell a go-to-market move from a site redesign.
What the website record holds
Each company website is refreshed daily to weekly, depending on the company, and two datasets of the marketing stack hold what matters here. Website Profile (company_site_facts) holds the state of the site: its key pages, the markets, languages and currencies it declares, its apps and social accounts, and the message in its announcement bar. Technology Changes (company_tech_events) holds every change, dated by the time it was observed. Together they are technographic data in the wider sense: what a company runs and shows on its own site, and when that changed. A company's first observation sets a baseline and is never counted as a change, so every event in the record is a real difference between two observations.
| Field | Dataset | What it holds |
|---|---|---|
key_pages | Website Profile (company_site_facts) | The address of each key page, from 17 keys that include pricing, demo, free_trial, contact_sales, partners and careers |
markets, languages | Website Profile (company_site_facts) | Country and language codes of the alternate versions the site declares |
currencies | Website Profile (company_site_facts) | Currencies of the prices marked up on the page |
latest_promotion | Website Profile (company_site_facts) | The announcement bar as text, offers and discount |
category, key, change | Technology Changes (company_tech_events) | What changed (page, market, language, currency, promo or platform, among others), which key, and whether it was added, removed or changed |
Reading the page set as a go-to-market motion
Treat the key pages as a profile of how the company expects to be bought, then watch for the observation in which the profile changes. The table lists the changes that carry the most meaning and what to check beside each. It says what a change can indicate, which is the hypothesis to confirm with a second source.
| Change in the page set | It can indicate | Check beside it |
|---|---|---|
pricing or free_trial added | A move towards buying without a sales conversation | login or api_docs added in the same observation |
pricing removed | Prices moved behind a quote | contact_sales or demo added in the same observation |
demo or contact_sales added | Sales-assisted buying, often for larger customers | upmarket in Sales Team Metrics (company_sales_weekly) |
partners or affiliate_program added | A channel or affiliate route to market | Announcements typed partnership |
wholesale, store_locator or subscription added | A new sales channel or a recurring-revenue offer | retail_store or supply_chain_logistics roles in by_function |
Building the watch
Read the state and the events together: the state says where a company stands, and the events say when it moved. The SQL below is PostgreSQL, with lists and objects held as JSON as delivered, and watchlist is your own table of company_id values.
1. Resolve the watchlist. Match each company to its company ID, company_id, by website domain. A listed company also carries ticker, mic, isin, lei and figi, and a brand or subsidiary carries the identifiers of its listed parent, so you can roll the brand sites of a group up to the group on isin.
2. Read the events since your last pull. Filter Technology Changes (company_tech_events) to the go-to-market categories and count the events in each observation, so that a redesign shows itself.
select
company_id,
observed_at,
category,
key,
change,
count(*) over (partition by company_id, observed_at) as events_in_reading
from company_tech_events
where category in ('page', 'market', 'language', 'currency', 'promo', 'platform')
and observed_at >= timestamptz '2026-09-28 00:00:00+00'
and company_id in (select company_id from watchlist)
order by company_id, observed_at, category;3. Read the state. Pull the current page set, currencies and banner for the same companies from Website Profile.
select
company_id,
key_pages::jsonb ->> 'pricing' as pricing_url,
key_pages::jsonb ->> 'free_trial' as trial_url,
key_pages::jsonb ->> 'contact_sales' as contact_sales_url,
currencies,
latest_promotion
from company_site_facts
where company_id in (select company_id from watchlist);4. Compare with the market. Read gtm_page_added, market_added, language_added and replatformed in Market Series (market_series): each counts the websites that made the same kind of change in a window, per 100 websites, by industry or country. A competitor that adds a pricing page when few websites in its industry did is making a choice of its own; one that adds it in a window when many did is following its industry.
Telling a move from noise
A key page is a signal. The key pages are the ones a site presents as its way of selling: pricing, demo, trial, partners. A menu redesign can add or drop a link while the page stays, so confirm a move with a second record, below, before you act on it.
One observation, many events. A new template, or a change of commerce or content platform, can arrive as a platform event with several page events in the same observation. Group by company_id and observed_at: ten events in one observation are one project, not ten decisions. Tool additions and removals sit in the same dataset and have their own guide, on running competitor displacement plays from technology changes.
Declared is not launched. markets and languages list the alternate versions a site declares, and a site can declare dozens of countries in one observation. currencies lists the currencies of marked-up prices. Read a new market, language or currency as a place to look: check it against first sales postings in that country (new_countries) and against announcements typed expansion, as in the guide to catching companies as they enter a new market.
Dates are observations. observed_at is the time the change was observed, so the change happened at that time or earlier. Allow one refresh interval, up to a week, between a change and its observation.
Promotions are recorded when they start. A new announcement-bar message is written as a promo event. You can count how often a competitor changes its offer and what discount the bar states, which gives the cadence of its offers.
Confirming a change with a second source
A website record shows what the site says. A go-to-market move is better supported when a record of another kind agrees within a quarter. Three are worth pairing with the site.
- Sales hiring. In Sales Team Metrics (
company_sales_weekly),upmarketmarks a company's first enterprise-segment sales posting,new_countrieslists the countries where it posted its first sales role that week, andby_segmentshows the mix of its open sales roles. The guide to tracking sales team build-out reads these columns in depth. - Announcements. In Company News (
company_news), an item typedproduct_launch,partnershiporexpansionand dated near the page change describes the move in the company's own words. - The market. The Market Series rows named above show how many websites in the same industry or country made the same change in the same window.
An illustrative case: the website of Acme Robotics drops pricing and adds contact_sales and demo in one observation. Three weeks later its Sales Team Metrics row shows upmarket set, and the month after, its newsroom carries an item typed product_launch about an enterprise tier. Each record has its own source and time, so the sequence can be written up with three dates and three datasets.
What Website Profile delivers for a go-to-market watch
Website Profile and Technology Changes give a go-to-market watch its structure: the key pages, the markets, languages and currencies a site declares, the apps it links and the banner message, each with the time it was observed. The banner text and its stated discount give the cadence and depth of a competitor's offers, and the currencies of marked-up prices show where it expects to sell. Website labels such as sales motion and pricing model are shown in the dashboard, and in the files the page set is the way to read a motion. The record is dated, written once and never revised, so a comparison between any two periods reads the same whenever you run it.
How Fokals delivers it
The marketing stack dataset holds the datasets above. Websites are refreshed daily to weekly, depending on the company. Through the REST API, GET /api/v1/changes returns changes oldest first from a time you set, so the last cursor is your bookmark for the next pull.
GET /api/v1/changes?since=2026-09-28&category=page&limit=200
Authorization: Bearer <your key>The data dictionary defines every column used here, and the methodology explains how the data is made.
Frequently asked questions
How can I tell when a competitor adds or removes a pricing page?
Read Technology Changes for the competitor's company ID, with the category set to page and the key set to pricing. The change column says added or removed, and the observation time says when it was seen. Pair it with the banner and the other key pages in Website Profile, and with the competitor's own announcements, to confirm what the change means.
What does Website Profile record about a competitor's pricing?
It records whether a pricing page is among the key pages of the website, the currencies of the prices marked up on it, and the banner message with its stated offers and discount. A change to any of them is a dated event. That tells you when a competitor changed how it presents pricing, in which currencies it prices, and how often it runs an offer.
How soon after a change does an event appear?
Websites are refreshed daily to weekly depending on the company, and each event is dated by the time it was observed. For a company refreshed weekly, allow up to a week between the change and its event. For a company refreshed daily, the event follows within a day. Each event is written once and never revised.
What does a new market or currency on a company website mean?
It means the site now declares an alternate version for that country, or marks up prices in that currency. It is a place to look and the first dated step of a launch, because a site can declare many countries at once. Check for first sales postings in the country in Sales Team Metrics, for announcements typed expansion, and for the change holding in later observations.
Which key pages does Fokals track?
Seventeen: pricing, demo, free trial, contact sales, login, careers, investors, newsroom, partners, affiliate program, store locator, subscription, wholesale, gift cards, blog, API docs and status. Website Profile records each one among the key pages of a company website, and a change to one is a page event in Technology Changes, dated and sourced.
The queries and code on this page are examples to adapt. Test them in your own environment before you rely on them.