Field guide for the Marketing stack, Hiring, Intent, Announcements-and-scale and Market-series products. Method: METHODOLOGY.md. Sourcing: SOURCING.md.
Conventions
- Files are CSV, UTF-8, one header row (JSONL through the API). Lists and objects are JSON in a single cell.
- Times are UTC, ISO 8601.
dayis a closed UTC day;week_startis the Monday of a Monday-to-Sunday UTC week. - Every file carries
company_id(stable),company, and the identifiers of the listing when the company or its parent is listed:ticker,exchange(the venue code),mic(ISO 10383),isin,lei,figi(the share-class FIGI). Join across products oncompany_id; join to market data onisin,figiorticker+mic. Identifiers come from OpenFIGI, GLEIF, Wikidata and the SEC ticker file (METHODOLOGY.mdsection 4.1); an ISIN or LEI whose check digit fails is never stored. - Daily and weekly rows are written once and never changed.
reconstructed=truemarks a period written more than seven days after it closed. - Only companies in the Fokals company index are delivered, and only those with a website read in English, on its homepage or in the English version it declares: a company with no such website is in no file, and a website with neither is in no file of websites (
METHODOLOGY.mdsection 4.2).listed_securitieskeeps every listing; a listing of a company that is left out carries no company.
Marketing stack
company_technologies
One row per company website and technology seen on it in the period.
| Column | Meaning |
|---|---|
domain | The company website. |
technology | Technology id (stable). |
technology_name, technology_category | Readable name and category. |
technology_catalogue | fokals when the signature is one Fokals writes and tests, open when it comes from the open-source catalogue (Methodology 5.1). |
first_seen_at, last_seen_at | First and latest reading that saw it. |
missing_since | Set while absent from recent readings but not yet counted as removed. |
seen_via | Views that saw it: html (homepage), container (tag-manager container), network (browser read), header (response headers), dns (DNS records). |
account_ids | Public account ids found with it (pixel ids, analytics properties, containers). |
company_tech_events
Every change seen between two readings of a company website. A site's first reading writes none.
| Column | Meaning |
|---|---|
observed_at | Reading that saw the change. |
category | technology, technology_id (a new account id under a technology already there), dns, platform (commerce or content platform replaced), market, language, currency, app, social, page, promo. |
key | What changed: a technology id, technology:account, a country code, a language code, a currency, ios:<id> or android:<package>, a social platform, a page key, announcement. |
change | added, removed or changed. |
before, after | Values before and after (JSON). |
technology_name, technology_category | For technology and DNS events. |
technology_catalogue | For technology and DNS events: fokals or open, as in company_technologies. |
company_site_facts
The latest reading of each company website in the period.
| Column | Meaning |
|---|---|
last_read_at | Time of the reading. |
read_url | The address read when it is not the homepage: the site's English version, declared by the homepage. Empty when the homepage itself was read. |
home_language | The language of the homepage when the site was read in its English version. |
title, lang | Page title and declared language. |
markets | Country codes the site declares alternate versions for. |
languages | Language codes of the page and its alternates. |
currencies | Currencies of prices marked up on the page. |
social_accounts | The company's own accounts: {platform: handle}. |
apps | {ios: [app ids], android: [package names]}. |
key_pages | {key: url} for pricing, demo, free_trial, contact_sales, login, careers, investors, newsroom, partners, affiliate_program, store_locator, subscription, wholesale, gift_cards, blog, api_docs, status. |
schema_types | Structured-data types marked up on the page. |
latest_promotion | {text, offers, discount} from the announcement bar. |
Website labels (sites-v2)
The labels each website carries in the dashboard and the data browser (site_state.labels, with label_version; sites-v1 until the site's next read). They are not yet a column of company_site_facts. Each label has its probability under probabilities; an empty choice or score means the model was not confident enough.
- Choices:
industry(21 industries),business_model(b2b,b2c,both),offering(physical_products,software_saas,services,marketplace,media_content,financial_products,healthcare,travel_hospitality,education,nonprofit_public,other),sales_motion(self_serve,sales_led,both,offline),price_tier(budget,mid_market,premium,luxury,not_stated),target_customer_size(consumers,smb,mid_market,enterprise,mixed),pricing_model(free,freemium,subscription,usage_based,one_time,quote_only,not_stated),geography_scope(local,national,multi_country,global),primary_persona(marketing,sales,engineering_it,finance_ops,hr_people,executives,consumers,clinicians,other),growth_stage(startup,scaleup,established,incumbent,unknown). - Scores (0–3, the most probable of four described levels):
ecommerce_maturity,tech_sophistication,content_intensity. - Flags (true/false):
sells_online,physical_locations,subscription,ai_product,sustainability,enterprise_focus,international,has_api,has_mobile_app,has_free_trial,has_demo_request,compliance_badges,has_partner_program,sells_to_government,regulated_industry.
sites-v1 rows carry the first five choices and the first seven flags only, with the same meanings.
Hiring
job_postings
One row per posting open at any time in the period. Descriptions are not delivered.
| Column | Meaning |
|---|---|
posting_id | Stable id. |
board_platform | The job board's system (greenhouse, lever, ashby, workday, recruitee, personio, jsonld for job markup on the company's own careers page). |
url | The public posting. |
title, department, team | As published. |
locations | [{city, region, country}]. |
country | First location's country (ISO 3166-1 alpha-2). |
work_mode | onsite, hybrid, remote or empty. |
employment_type | full_time, part_time, contract, temporary, internship or empty. |
posted_at | Posting date as the board gives it. |
first_seen_at, last_seen_at, closed_at | When we first and last saw it, and when it was closed (absent from two complete reads at least 20 hours apart). |
found_on_first_read | Already on the board at our first read of it: first_seen_at is not its opening date. |
salary_min, salary_max, salary_currency, salary_period | Pay as stated; period year, month, week, day or hour. |
salary_usd_annual_min, salary_usd_annual_max | Pay on one yearly US-dollar scale at the latest ECB reference rate; empty when outside 5,000–2,000,000. |
experience_years_min | Minimum years of experience asked for. |
degree | none, bachelor, master, doctorate or empty. |
visa_sponsorship | offered, not_offered or empty. |
languages | Languages required (ISO 639-1). |
technologies | Software named in the posting (catalogue ids); the company's own products are left out. |
label_version | jobs-v2 (jobs-v1 for postings labelled before 23 September 2026 and not yet relabelled). |
labels | {job_function, seniority, remote_policy, contract_type, technical_depth, people_manager, ai_role, paid_media, selects_tools, international, new_initiative, urgent, team_build, replaces_vendor, budget_owner, tool_*}. An empty choice or score means the model was not confident enough. jobs-v1 rows carry the first two choices and the first six flags only. |
sales_facts | For a posting that states them, what the employer says about the deal (JSON): ote and base as written ({min, max, currency, period}) with ote_usd and base_usd (yearly US-dollar midpoints), base_share (0.5 for a 50/50 split), uncapped, variable_pay, quota ({amount, currency, period}) and quota_usd, ramp_months, lead_source (inbound, outbound, mixed), inbound_share (percent), deal_size and deal_size_usd, sales_cycle_months. Empty when the posting states none. Advertised, not realised. |
sales_labels, sales_label_version | For a posting in a sales function, the sales-v1 labels below; empty otherwise. |
job_function (26): software_engineering, hardware_engineering, data_analytics, data_science_ml, product_management, design, marketing_brand, marketing_performance, marketing_content_social, sales, sales_development, customer_success_support, operations, supply_chain_logistics, manufacturing_production, finance_accounting, legal_compliance, people_hr, it_security, research_science, healthcare_clinical, retail_store, hospitality_food, education_training, executive_leadership, other.
seniority (9): intern, entry, mid, senior, lead_principal, manager, director, vp, c_level.
remote_policy: remote, hybrid, onsite, unspecified. contract_type: permanent, contract, temporary, internship, unspecified.
technical_depth (0–3): 0 no technical skills required; 1 uses technical tools as a user; 2 builds, configures or administers technical systems; 3 designs or leads complex technical systems.
Flags (true/false): people_manager, ai_role, paid_media, selects_tools, international, new_initiative, urgent (immediate start or urgent hire), team_build (one of several hires growing a team), replaces_vendor (brings agency or vendor work in-house), budget_owner.
Tool families (true when the posting names or requires the family's products): tool_salesforce, tool_hubspot, tool_google_ads, tool_meta_ads, tool_ga4, tool_adobe, tool_shopify, tool_sap, tool_workday, tool_snowflake, tool_databricks, tool_aws, tool_azure, tool_gcp, tool_figma.
Sales labels (sales-v1)
Read once more, by the same model, for every posting jobs-v2 puts in a sales function (and account-management titles filed under customer success, sales leaders filed under executives). Choices kept at probability 0.45 or above: role (sdr_bdr, account_executive, account_manager, sales_engineer, sales_leadership, sales_operations, partnerships_channel, other) and segment (smb, mid_market, enterprise, unspecified). Flags kept at 0.7 or above: quota_carrying, inbound_leads, outbound_prospecting, new_business, founding_sales. Probabilities are kept with the labels.
label_checks
Hand grading of the website and posting labels (not delivered; the source of the accuracy figures in METHODOLOGY.md section 6.5). One row per graded field.
| Column | Meaning |
|---|---|
kind | site or posting. |
subject | The website domain, or the posting id. |
version | The label version graded (sites-v2, jobs-v2). Figures are per version. |
field | The label field (industry, sells_online, job_function, tool_aws, ...). |
model_value | The label as the model gave it, as text. |
verdict | correct, wrong or unsure. Precision = correct / (correct + wrong). |
correct_value | What the grader says it should be, when wrong. |
checked_by, checked_at | Who graded it and when. |
company_hiring_daily
Per company and closed UTC day.
| Column | Meaning |
|---|---|
open_postings, new_postings, closed_postings | Open at the end of the day; seen opening that day (not first-read postings); closed that day. |
by_function, by_seniority, by_country, by_work_mode | Open postings by label or field: {value: count}. |
ai_postings, paid_media_postings | Open postings with those flags. |
tech_mentions | Open postings naming each tool: {tool: count}. |
median_salary_usd | Median of open postings' yearly US-dollar pay (midpoint of range). |
company_sales_weekly
The sales organisation per company and closed week (Monday to Sunday UTC), from its own postings. Written once after the week closes. A sales posting is one labelled under sales-v1 with any role but other; a company has a row for a week in which it had one open, opened or closed.
| Column | Meaning |
|---|---|
week_start | The Monday. |
open_sales, new_sales, closed_sales | Sales postings open at the week's end; opened in the week (not first-read ones); closed in it. |
open_all | Every posting open at the week's end, for the sales share. |
by_role, by_segment, by_country | Open sales postings by sales-v1 role and segment, and by country: {value: count}. |
new_countries | Countries with the company's first sales posting this week, none before. |
upmarket | The company's first enterprise-segment sales posting opened this week. |
median_base_usd, median_ote_usd | Median advertised base pay and on-target earnings of open sales postings, yearly US dollars, by role. Base is the stated base, or a plain salary range when no OTE is stated. |
tools | Sales tools named in open sales postings: {tool: count}. |
quota_stated | Open sales postings that state a quota or target. |
inbound_share | Median stated share of inbound pipeline, percent, when stated. |
sales_pay_benchmarks
What employers advertise for sales roles, across companies, per closed week, role and country (ALL for every country together). Only groups of at least five postings.
| Column | Meaning |
|---|---|
week_start, role, country | The week, the sales-v1 role, the posting's country or ALL. |
postings | Open sales postings in the group with a stated base or OTE. |
base_p25_usd, base_median_usd, base_p75_usd | Quartiles of advertised base pay, yearly US dollars. |
ote_p25_usd, ote_median_usd, ote_p75_usd | Quartiles of advertised on-target earnings. |
Intent
company_intent_weekly
Per company, topic and closed week, for topics scoring at least 5.
| Column | Meaning |
|---|---|
topic, topic_label, topic_group | One of 69 topics in nine groups. |
intent_version | intent-v2. |
score | 0–100, from the signals of the 90 days to the week's end, fading by half every 30 days. |
surge | At least 50 and at least double the company's own average for the topic over the previous twelve weeks. |
signals | Number of signals behind the score. |
evidence | The five strongest: [{date, kind, source, weight, detail}]. |
company_signals
Every dated signal behind the scores.
| Column | Meaning |
|---|---|
observed_at | When the action was seen (a posting's own date where it has one; a filing's date). |
source | site, dns, careers, filing, news (an announcement; kind news_event, weight 1–3, detail = {title, url, events, from}). |
kind | For example ad_platform_added, tech_added, tech_removed, tech_account_added, dns_verification_added, replatformed, market_added, language_added, currency_added, app_added, social_account_added, sales_motion_added, programme_added, investor_relations_added, careers_added, posting_tool, posting_paid_media, posting_selects_tools, posting_international, posting_ai, posting_new_initiative, posting_leadership, model_topic, funding. |
topics | Topics the signal counts towards. A model_topic signal carries one to three. |
weight | Its strength before fading (0–5). model_topic weighs 2. |
detail | What was seen (technology, market, posting title, amount raised). For model_topic: {version, group, probability, probabilities, title, posting or domain}, version being signal-v2. |
company_funding
SEC Form D notices by operating companies (pooled investment funds left out).
| Column | Meaning |
|---|---|
accession | SEC accession number. |
form | D (new notice) or D/A (amendment). |
filed_at | Filing date. |
issuer, cik | Issuer's legal name and SEC id. |
company_id, company, ticker | Set when the issuer matches exactly one company in the index. |
industry | Industry group as filed. |
city, state | Issuer's principal place of business. |
amount_offered, amount_sold | US dollars; empty when indefinite. |
first_sale | Date of first sale. |
is_amendment | An amendment to an earlier notice. |
details | Entity type, jurisdiction, year of incorporation, revenue range, exemptions, securities, whether the offering runs more than a year, business combination, minimum investment, amount remaining, number of investors, non-accredited investors, sales commissions and finders' fees. |
Announcements and scale
company_news
One row per announcement a company made about itself: an item on its newsroom or press page, an entry in a feed its homepage declares, or (listed companies) a Form 8-K current report.
| Column | Meaning |
|---|---|
at | The date the company published it (published_at); when the source gives none, when we first saw it. |
company_id, company, ticker | The company that published it. |
source | rss, atom, page (the company's newsroom page) or sec_8k. |
url | The original announcement or filing document. |
title | As published (for an 8-K: the form and its item labels). |
event_types | Zero or more of product_launch, partnership, acquisition_made, acquired_or_merged, funding_round, leadership_change, layoffs_restructuring, expansion, incident, financial_results, award_or_recognition, regulatory_or_legal, other. Newsroom items: read by the model under news-v1; 8-Ks: from the item numbers. |
items | Form 8-K item numbers filed under (for example 2.01, 5.02, 9.01); empty otherwise. |
accession | SEC accession number, for 8-Ks. |
excerpt | At most 1,200 characters of the announcement's own text (for an 8-K, the text under its items). |
label_version | news-v1 (model-read) or sec-items-v1 (mapped from item numbers). |
roles, role_labels, role_version | For a leadership change, the role concerned under roles-v1 (below); never the person. |
News labels (news-v1): one choice, event_type (the list above, kept at probability 0.45 or above), and five flags kept at 0.7 or above: about_this_company (the item is about the company itself), executive_appointment, executive_departure, names_amount (a money amount is stated), mentions_hiring. Probabilities are kept with the labels. An item the model does not read as being about the company carries no event type.
Leadership roles (roles-v1): for an item whose event type is a leadership change (from the model or from Form 8-K item 5.02), the same model reads the company's own text once more for the role concerned, one of ceo, cfo, coo, cro_cso (revenue, sales or commercial leader), cmo, cto_cio_cpo, chro, general_counsel, board, other_executive, none, and the direction (appointed, departed, succession), with a multiple flag when more than one role changes. Choices are kept at 0.45 or above, the flag at 0.7. The person is not stored; roles holds the role id.
company_headcounts
Employee counts over time, from public statements. One row per company, date and source.
| Column | Meaning |
|---|---|
as_of | The date the count refers to: the annual report's period end, or the date Wikidata gives. |
company_id, company, ticker | The company. |
employees | The count as stated. |
source | sec_10k (the annual report) or wikidata. |
ref | The filing's accession number, or the Wikidata item id. |
traffic_ranks
The website's monthly traffic tier from the Chrome UX Report (Google), licensed CC BY 4.0; delivered with attribution.
| Column | Meaning |
|---|---|
month | First day of the month the rank is for. |
domain, company_id, company | The website and its company. |
rank_bucket | The smallest bucket the origin is in: 1000, 5000, 10000, 50000, 100000, 500000, 1000000, 5000000, 10000000, 50000000. Smaller is more traffic. |
origin | The origin the bucket came from (https://www.example.com), the best among the domain's variants. |
attribution | Chrome UX Report (Google), CC BY 4.0. |
listed_securities
Listed securities: one row per equity listing worldwide, keyed by FIGI, with the company it belongs to when one matches. Served by the API (/listed) and available as a file on request; the identifier columns of every other dataset come from it.
| Column | Meaning |
|---|---|
figi | The listing's FIGI (stable, one per listing). A listing Wikidata asserts and OpenFIGI does not yet carries a wd: key in its place until a pass brings the FIGI. |
share_class_figi | The FIGI shared by every listing of the same share class; the value carried as figi on the other datasets. |
name | The issuer's name as the source gives it. |
ticker, exchange | The ticker and OpenFIGI's venue code (US, LN, GR, JP ...). |
mic | The venue's ISO 10383 market identifier code, when known. |
isin, lei | The security's ISIN and the issuer's LEI (through GLEIF's ISIN-to-LEI file), each only when its check digit is valid. |
country | The issuer's country, from its LEI record or Wikidata. |
security_type | OpenFIGI's type: Common Stock, Depositary Receipt, REIT, Partnership Shares and the national certificate forms; never funds, ETPs, rights, warrants or preferred stock. |
status | active, or delisted once a listing has not been seen for 45 days after a full pass (the row is kept, so history joins stay intact). |
company_id, company | The company in the Fokals index this listing belongs to; empty until a match is made. The match is by ISIN, LEI, ticker on the same market, or name and country, in that order. |
Market series
market_series
How an industry, a country, a size band or a market moved, computed weekly from the company tables (METHODOLOGY.md section 9). One row per metric, dimension, window and as-of date, written once. Rows over fewer than 20 companies (20 postings for pay and share metrics) are not written.
| Column | Meaning |
|---|---|
as_of | The Sunday the windows end (UTC, inclusive). |
metric | A metric family, or family:subject for families with subjects (tech_added:salesforce, seniority_share:senior, news_event:funding_round, intent_surge:crm). |
family, subject, metric_name, unit, source | The catalogue's description of the metric, added on export and by the API. |
dimension_kind, dimension | all; industry (the sites-v2 industry id); sector (the company's sector text); country (ISO 3166-1 alpha-2 headquarters country); size (1-10, 11-50, 51-200, 201-1000, 1001-5000, 5000+); market (an exchange code, for listings). |
window_days | 7, 30, 180; 365 for headcount; traffic has 30 and 180 only. |
count | The numerator: events, postings or companies in the window; for a median metric, the median itself. |
cohort | What the rate is over: companies or websites covered since before the window began (same-store), or postings for share and pay metrics. 0 for listings. |
rate | count in the metric's unit: per_100_companies, per_100_sites, share_of_postings (0 to 1), share_of_companies (0 to 1), median_usd, median_pct; empty for count metrics. |
previous | The same count over the window just before this one, on the same cohort. |
growth | (count − previous) / previous; empty when there was nothing before. |
index | 100 at the series' first as-of date, then the rate relative to it. |
Metric families (GET /api/v1/series/metrics gives the live catalogue with subject lists): hiring_new, hiring_closed, hiring_open, hiring_net, pay_median, seniority_share, work_mode_share, function_share, ai_role_share, sales_share, sales_segment_share, sales_lead_source_share, sales_ote_median, sales_base_median, tech_added, tech_removed, tech_prevalence, gtm_page_added, market_added, language_added, replatformed, news_event, intent_surge, traffic_up, traffic_down, headcount_change_median, listings_new, listings_delisted.