Canonical field registry
Every canonical field of every built-in type, with its tier, type, and normalization rule, generated from spec/fields
What you'll learn
You're mapping a CSV column or a vendor's field onto gtme's names and need the exact field name and its rule.
- every canonical field per type
- which fields a key is built from
- the normalization rule each value gets
The 3 types the binary ships, and every canonical field of each. A field name not listed under a type must carry a vendor's or a pipeline's prefix. Each type's own page adds how a record is keyed, tier by tier, and the relations its fields mint.
| Type | Kind | Keyed by | Fields |
|---|---|---|---|
company | subject: what a pipeline delivers to | company_domain, then company_name | 6 |
person | subject: what a pipeline delivers to | email, then linkedin_url, then github_username, then twitter_handle, then (full_name or first_name + last_name) and company_domain | 32 |
post | signal: what a pipeline finds and traverses from | url | 7 |
company
| Field | Tier | Type | Normalization | Description |
|---|---|---|---|---|
company_domain | identity | string | domain | Registrable domain (eTLD+1). Identity tier 1 for companies (SPEC.md §4). |
company_name | identity | string | trim | Company name. Feeds the name-hash fallback tier (SPEC.md §4). |
company_website | core | string (uri) | trim | Website URL as provided. company_domain is the comparable form. |
company_linkedin_url | core | string (uri) | linkedin_url | LinkedIn company page URL. |
company_employees | core | integer | none | Headcount as an integer — never a range string. |
company_industry | core | string | trim | Industry label. Value domain deferred until a second adapter forces comparability (rule of two). |
person
| Field | Tier | Type | Normalization | Description |
|---|---|---|---|---|
email | identity | string (email) | email | Work or personal email. Identity tier 1 (SPEC.md §4). |
linkedin_url | identity | string (uri) | linkedin_url | PUBLIC LinkedIn profile URL (vanity slug) only. Identity tier 2 via the derived slug. An internal-form or Sales-Navigator URL is an INVALID value for this field — those are linkedin_internal_url / linkedin_sales_nav_url (SPEC.md §4, ADR-020); the shapes are separate fields precisely so they can never collide under one name. |
linkedin_internal_url | core | string (uri) | trim | Internal-form LinkedIn profile URL (opaque token in the /in/ path, such as linkedin.com/in/ACwAA…). Stored as the URL, case preserved — gtme distinguishes observable URL shapes and does not reinterpret them as identifiers. NOT key material in v0 (SPEC.md §4, ADR-020): an enrichment that resolves it to the public profile writes linkedin_url, and the ordinary key upgrade applies. |
linkedin_sales_nav_url | core | string (uri) | trim | Sales Navigator URL form (linkedin.com/sales/lead/… or /sales/people/…). Stored as the URL, case preserved. NOT key material in v0 (SPEC.md §4, ADR-020); same recovery path as linkedin_internal_url. |
first_name | identity | string | trim | Given name. Feeds the name-hash fallback tier with last_name (SPEC.md §4). |
last_name | identity | string | trim | Family name. Feeds the name-hash fallback tier with first_name (SPEC.md §4). |
github_username | identity, reserved | string | handle | GitHub username. Reserved identity tier 3, key prefix gh: (SPEC.md §4, ADR-020); no v0 adapter provides it. |
twitter_handle | identity, reserved | string | handle | Twitter/X handle without the @. Reserved identity tier 4, key prefix tw: (SPEC.md §4, ADR-020); no v0 adapter provides it. |
full_name | core | string | trim | Full display name. Feeds the name-hash fallback tier when first/last are absent. |
title | core | string | trim | Current job title, as stated. |
seniority | core | string | lower | Seniority band, lowercased. No locked value domain in v0 — providers do not converge enough to pin one; a domain is declared only if real cross-provider evidence shows convergence (SPEC.md §4a). |
headline | core | string | trim | Profile headline/tagline. |
about | core | string | trim | Profile summary / about section. |
city | core | string | trim | City of residence/work. |
state | core | string | trim | State/region. |
country | core | string | trim | Country. |
location | core | string | trim | Free-form location string when a provider does not split city/state/country. |
company_name | core | string | trim | Current employer's name. |
company_domain | core | string | domain | Current employer's registrable domain (eTLD+1). The comparable, dedupe-safe form — never a full URL. Declares the works_at reference (ADR-054): a person record carrying it also names a company, keyed and populated from company_domain and company_name, and the runner writes works_at from the person to it. |
company_website | core | string (uri) | trim | Current employer's website URL as provided. company_domain is the comparable form. |
company_linkedin_url | core | string (uri) | linkedin_url | Current employer's LinkedIn company page URL. |
company_employees | core | integer | none | Current employer's headcount as an integer — never a range string. An adapter whose provider reports a range maps it to a point estimate or omits the field. |
company_industry | core | string | trim | Current employer's industry label. Value domain deferred until a second adapter forces comparability (rule of two). |
current_role | core | string | trim | Current role as an enrichment provider states it (may differ from a source's title). |
current_company | core | string | trim | Current employer as an enrichment provider states it. |
role_history | core | array of string | none | Past roles, most recent first, one string per role. |
recent_posts | core | array of string | none | Recent public post texts, most recent first. |
follower_count | core | integer | none | Social follower count. |
open_to_work | core | boolean | none | Whether the profile advertises being open to work. |
email_status | core | string | lower | Email verification status as the providing adapter reports it. Waterfall-relevant; canonical value domain deferred until a second adapter forces comparability (rule of two). |
first_line | core | string | trim | Composed personalized opening line, consumed by deliver steps. |
ps_line | core | string | trim | Composed personalized P.S. line, consumed by deliver steps. |
post
| Field | Tier | Type | Normalization | Description |
|---|---|---|---|---|
url | identity | string (uri) | url | The post's platform-public URL — the one key tier (SPEC.md §4, the url rule: scheme and host lowercased, fragment and trailing slash dropped, path and query kept). |
platform | core | string | lower | The platform the post lives on, lowercased. No locked value domain yet (rule of two). |
text | core | string | trim | The post's body text, as published. |
published_at | core | string (date-time) | trim | When the post was published, RFC3339. |
likes | core | integer | none | Reaction count at read time. |
comments | core | integer | none | Comment count at read time. |
reposts | core | integer | none | Repost/share count at read time. |
Tier is identity for a field a key is built from and core for the rest; reserved marks a key tier no adapter provides yet. Normalization is the rule that puts a value in its stored form.
Used in
- Canonical fields: Every canonical field per record type, with its type and normalization rule
- Types and traverse: Every type file and its fields