HubSpot Properties
Complete Guide
Every field type, every setting, every configuration option — with real-world examples, case studies, governance frameworks, and admin best practices for building a clean, scalable CRM data layer.
The data layer of your entire CRM — every field that stores information on a record.
A Property is a single labelled data field on a HubSpot record. It stores one piece of information about a Contact, Company, Deal, Ticket, or Custom Object. Every record type has its own set of properties — and the total collection of properties on a record type defines what your CRM knows about that type of record.
Think of a Contact record like a paper file. The file has a cover with spaces for a name, phone number, address, and status. Each of those spaces is a property. HubSpot gives you pre-printed spaces (default properties) and lets you add your own blank spaces (custom properties).
Why properties are everything
| Admin task | How properties make it possible |
|---|---|
| Segment contacts for a campaign | Filter by Lifecycle Stage = MQL and Industry = SaaS |
| Trigger an automation | Workflow enrolls when Lead Status changes to "In Progress" |
| Build a revenue report | Sum Deal Amount where Pipeline = New Business and Stage = Closed Won |
| Personalize an email | Insert {{contact.firstname}} into the subject line |
| Score leads automatically | If Industry = SaaS AND Employees > 50 → add 20 points to Lead Score |
| Forecast quarterly revenue | Sum Deal Amount × Close Probability where Close Date is this quarter |
| Qualify a deal via BANT | Check Budget Confirmed, Decision Maker, Need Score, Timeline to Buy |
Bad properties = a broken CRM. Wrong field types, inconsistent naming, no governance, duplicate fields — these silently corrupt your data and make every downstream function (reports, automations, segmentation) unreliable. Property design is one of the highest-leverage admin responsibilities.
Property anatomy
| Component | What it is | Example |
|---|---|---|
| Label | The human-readable display name shown in the UI | Lifecycle Stage |
| Internal name | The API/workflow identifier — auto-generated, cannot be changed after creation | lifecyclestage |
| Field type | The kind of data it accepts — text, number, dropdown, date, etc. | Dropdown select |
| Value | The actual data stored on a specific record | Marketing Qualified Lead |
| Group | The folder/section this property lives in on the record sidebar | Contact Information |
| Object | Which record type owns this property — Contact, Company, Deal, Ticket | Contact |
Every property is either built by HubSpot or built by you. Understanding the difference is critical.
| Default Properties | Custom Properties | |
|---|---|---|
| Created by | HubSpot — shipped with your portal | You (the admin) |
| Can be deleted? | No — permanent | Yes — or archived |
| Can be renamed? | Label only — internal name is fixed | Label only — internal name is fixed after creation |
| Examples | Email, Lifecycle Stage, Deal Amount, Close Date | Product Interest, NPS Score, BANT Score, Preferred Language |
| Appear in | Automations, reports, forms — everywhere immediately | Everywhere once configured by admin |
| Count limit | No limit | Depends on plan: Starter 1k, Pro 10k, Enterprise 10k+ |
Never repurpose a default property for something it wasn't designed for. If HubSpot has a "Phone" field and someone starts storing "Annual Revenue" in it — you've broken your own CRM. The property type won't match, reports will be wrong, and the data will be silently corrupted. Always create a custom property instead.
Calculated properties
A third category — Calculated properties — are auto-computed by HubSpot and cannot be manually edited. They include:
| Property | What it calculates | Object |
|---|---|---|
| hs_analytics_source | Original traffic source of the first conversion | Contact |
| hs_email_open_count | Total email opens across all sent emails | Contact |
| num_associated_contacts | Number of contacts linked to a company | Company |
| hs_deal_stage_probability | Win probability based on current stage | Deal |
| hs_time_in_[stage] | How long a deal has been in a specific stage | Deal |
| hubspotscore | Lead score based on admin-defined criteria | Contact |
Click any field type below to expand its full definition, use cases, mock UI, and admin guidance.
Most field types cannot be changed after a property is created. A Number cannot become a Dropdown. A Single-line text cannot become a Checkbox. You must delete and recreate the property — and lose all historical data stored in it. Choose your field type carefully before saving.
Exception: you CAN switch between Dropdown, Checkboxes, and Radio select — because they all store "option" values.
Field type decision guide
| If you need to store… | Use this field type | Avoid this mistake |
|---|---|---|
| A short text value (name, ID, city) | Single-line text | Don't use if the field has fixed options — use Dropdown |
| Longer paragraphs or notes | Multi-line text | Can't be filtered or segmented — don't use for structured data |
| A number to add, average, or compare | Number | Don't use text for revenue, scores, or counts |
| Money / currency value | Currency | Don't use Number — Currency auto-formats and respects locale |
| A calendar date (no time) | Date picker | Don't use text — date pickers enable date-based workflow triggers |
| A date and exact time | Date and time | Note: stored in UTC, displayed in portal timezone |
| One choice from a fixed list (long list) | Dropdown select | Don't use text — you lose the ability to report cleanly |
| One choice from a fixed list (2–5 options) | Radio select | Same as dropdown, but shows all options visible at once |
| Multiple choices from a list | Checkboxes | Don't use dropdown — it only allows one selection |
| A yes/no binary flag | Single checkbox | Unchecked ≠ false — it means unknown. Design workflows accordingly |
| An email address | Don't use text — Email type validates format and enables click-to-send | |
| A phone number | Phone number | Don't use text — Phone type enables HubSpot Calling click-to-dial |
| A URL / web address | URL | Don't use text — URL type makes links clickable in HubSpot |
| An auto-calculated lead score | Score | Can't be manually edited — use Number if you need workflow control |
The folders that organise properties inside a record sidebar.
Every property belongs to a Property Group — a labelled section that groups related properties together in the record view. When a rep opens a Contact record, they see properties organised by group in the left sidebar.
| Group type | Created by | Can be deleted? | Examples |
|---|---|---|---|
| Default groups | HubSpot | No — but can be renamed | Contact Information, Sales Information, Email Information, Social Media |
| Custom groups | Admin | Yes | BANT Qualification, Partner Data, Onboarding Status, Billing Info |
Always create a dedicated custom group before adding custom properties. Never drop custom properties into HubSpot's default groups — it breaks the organisation of the record sidebar and confuses your team. Name groups clearly: "Qualification Data," "CS Team Fields," "Finance Properties."
How to create a property group
- Go to Settings → Properties
- Select the object type (Contact, Company, Deal, etc.)
- Click "Groups" at the top of the page
- Click "Create group"
- Enter a clear, descriptive name (e.g. "BANT Qualification")
- Save — the group now appears as a section in the record sidebar
Do not create one giant custom group called "Custom" or "Other." Break properties into logical groups by team or function. A CSM's onboarding fields should not share a group with the finance team's billing fields.
When you create or edit a property, every configuration option — and what it actually does.
| Setting | What it does | Admin guidance |
|---|---|---|
Object type Contact / Company / Deal / Ticket |
Determines which record type this property belongs to. | Cannot be changed after creation. A Contact property cannot be moved to Company. Plan your object architecture before creating properties. |
Group Property group assignment |
Which section of the record sidebar this property appears in. | Always assign custom properties to a named custom group — never leave them in HubSpot's default groups. |
Label Display name |
The name shown to users in the CRM interface, forms, and reports. | Use plain English. No abbreviations. Think "will a new hire in 12 months understand this?" Rename if needed — unlike internal name, this CAN be changed after creation. |
Internal name snake_case_identifier |
The API and workflow identifier. Auto-generated from label on first save. | Cannot be changed after creation. Any integration or workflow using this name will break if the property is deleted and recreated. Choose your label carefully before saving — the internal name is set at that moment. |
Description Help text for users |
Appears as help text below the property field in the record. Explains what to enter. | Always fill this in for every custom property. Write: what this field is for, who fills it in, and example values. This is your documentation. |
Field type Text / Number / Date / Dropdown etc. |
Controls what kind of data can be stored and how the input appears in the UI. | Most field types cannot be changed after creation. Choose carefully (see field type guide above). |
Options For Dropdown / Checkbox / Radio |
The list of selectable values for option-based field types. | Keep options mutually exclusive and exhaustive. Always include an "Other" option if reps might encounter edge cases. You can add options later, but cannot remove options that have data stored against them without losing that data. |
Required Checkbox toggle |
If enabled, this property must have a value before a record can be saved. | Use sparingly. Required fields are powerful for data quality but if overused, reps enter junk data just to save the record. Limit required fields to 3–5 critical properties per object. |
Hidden in new object form Toggle |
Hides the property from the "Create Contact / Deal" popup modal. | Use for properties that are only filled later in the process (e.g. "Closed Lost Reason" hidden at creation, shown after deal moves to that stage). |
Hidden from forms Toggle |
Prevents this property from appearing in the HubSpot form builder as an available field. | Enable for all internal admin or CRM-only fields that should never appear on a public-facing form (e.g. "Lead Score," "Internal Notes," "CRM Source"). |
Searchable in global search Toggle |
When enabled, the values of this property appear in HubSpot's global search bar. | Enable for unique identifiers — Customer ID, Account Number, Order Number — so reps can search for a record by that value instantly. |
Show in record sidebar Toggle |
Controls whether this property appears in the "About" section of the record sidebar by default. | Only show the 8–12 most important properties in the sidebar. The rest can be accessed via "View all properties." Cluttered sidebars reduce adoption. |
Read-only Access control |
If set, users without the right permission cannot edit this property value. | Use for calculated or sensitive fields: "Contract Value," "Approved Discount," "MRR." Only super admins or specific roles can change these. |
Step-by-step walkthrough — path, options, and the decisions you make at each stage.
Settings → Properties → [Select Object] → Create property (top right button)
- Choose the object — Contact, Company, Deal, Ticket, or Custom Object. This locks the property to that record type forever.
- Choose the group — pick an existing custom group or create a new one. If this is a new topic area, create a group first before proceeding.
- Write the label — clear, plain English, no abbreviations. Example: "Preferred Communication Channel" not "PCC" or "comm_pref."
- Review the internal name — HubSpot auto-generates this from your label (e.g., preferred_communication_channel). You can edit it now — but not after saving. If you have an integration that will use this property, confirm the naming convention with your dev team first.
- Add a description — explain what goes here, who fills it in, and example values. This is documentation that saves hours of confusion later.
- Select the field type — use the decision guide above. For "Preferred Communication Channel" → Radio select (Email / Phone / WhatsApp — one answer, small list, all visible).
- Add options (if applicable) — for Dropdown/Checkbox/Radio: add all your values. Set a display order. Consider whether you need a default value.
- Configure settings — Required? (probably no). Hidden from forms? (yes, if internal). Show in sidebar? (yes, if reps need to see it frequently).
- Save — the property is now live on every record of that object type.
Ask yourself: Does a property with a similar purpose already exist? Check by searching in Properties before creating. Duplicate properties are the #1 source of CRM data quality problems.
Six ways a property value gets written — and the critical "last write wins" rule.
| Source | How it works | Examples | Type |
|---|---|---|---|
| Form submission | When a contact fills a HubSpot form, each form field maps to a property. The value they enter is written to their Contact record. | Name, Email, Company, Job Title, Area of Interest | Human-initiated |
| Manual entry | A rep opens a record and directly edits a property value. HubSpot logs who changed it and when in the property history. | Lead Status, Next Steps, Closed Lost Reason | Human-initiated |
| CSV import | Admin uploads a spreadsheet. Each column maps to a property. Values are written in bulk to all imported records. | Migrating data from another CRM, bulk updating outdated fields | Human-initiated |
| Workflow action | A workflow fires a "Set property value" action, writing a value to a property automatically based on trigger conditions. | Lifecycle Stage updated on deal creation; Lead Score updated on email click | Automated |
| Integration / API | An external tool (Salesforce, Stripe, Typeform, etc.) syncs data into HubSpot. Their field values map to HubSpot properties. | Stripe plan name syncs to "Subscription Plan" property; Typeform survey answers sync to custom properties | Automated |
| HubSpot auto-populate | HubSpot's own system writes values — analytics tracking, scoring calculations, timestamps, and enrichment data. | Original Source, Last Activity Date, HubSpot Score, Create Date | Automated |
When multiple sources write to the same property, the most recent write wins — overwriting the previous value. This causes invisible data loss if not managed carefully.
Example: A form sets Lifecycle Stage = "Lead." One second later, a workflow sets it to "MQL." MQL wins — that's correct. But if an import three months later overwrites a rep's manually-set Lead Status = "In Progress" back to "New" — that's data loss.
Solution: In workflow actions, there is a setting called "Don't overwrite existing values." Enable this when you want to protect data that may have been set by a human or upstream process. Default behaviour (without this enabled) is always to overwrite.
Property history
Every time a property value changes, HubSpot records it in the property history log. You can view this on any record by clicking any property and selecting "View property history." This shows: what the old value was, what the new value is, when it changed, and what source changed it (workflow, manual, import, API). This is invaluable for debugging data quality issues.
Property governance is one of the most important — and most neglected — parts of HubSpot administration.
Without governance, properties multiply. In 12 months, a portal can easily accumulate 200+ custom properties — many duplicated, many unused, many with inconsistent names and no descriptions. At that point, the CRM becomes unusable and data is unreliable. An admin who governs properties proactively is 10× more valuable than one who just creates them.
Who can create properties
By default, any Super Admin in HubSpot can create custom properties. In larger teams, this quickly becomes a problem. Restrict property creation to 1–2 designated admins who enforce naming conventions and avoid duplication.
Naming conventions — the admin standard
| Convention | Rule | Example |
|---|---|---|
| Prefix by team | Add a short prefix to identify which team owns the property | [CS] Onboarding Status, [FIN] Contract Value, [MKT] Campaign Tag |
| Plain English labels | No abbreviations, no jargon, no internal codes | "Preferred Language" not "Pref Lang" or "lang_pref" |
| Verb + noun for actions | Properties that track whether something happened should say so | "Has Signed NDA," "Has Attended Demo," "Has Received Welcome Email" |
| Date properties end in "date" | Makes date properties immediately identifiable | "Contract End Date," "Last Review Date," "First Purchase Date" |
| Score properties end in "score" | Distinguishes scores from other number fields | "NPS Score," "BANT Score," "Engagement Score" |
Monthly governance checklist
- 📋Audit for duplicate properties — two or more properties storing the same data. Merge via import and archive the redundant one.
- 🗄️Archive unused properties — any custom property with 0 records filled in for 6+ months. Archiving hides it from the UI but preserves historical data.
- 📝Review description coverage — any custom property without a description should get one added immediately.
- 🏷️Enforce naming conventions — rename any properties that don't follow the convention (label change is safe).
- 👁️Review sidebar configuration — are the right properties visible on records? Remove low-value properties from default sidebar view.
- 🔒Audit required fields — are required fields being filled with real data or placeholder values? Adjust if adoption is poor.
Building a complete BANT qualification property set from scratch — how a real admin does it.
A B2B SaaS company wants their SDRs to qualify leads using the BANT framework (Budget, Authority, Need, Timeline). None of these are default HubSpot Contact properties. Here is how an admin builds them:
Step 1 — Create the property group
Before creating any properties: Settings → Properties → Contacts → Groups → Create group → Name: "BANT Qualification"
Step 2 — Create the properties
Step 3 — Connect to workflow automation
Step 4 — Result
Now the sales manager can report: "What percentage of MQLs reached BANT Score ≥ 3 this month?" SDRs have a structured qualification framework. The pipeline only contains properly qualified leads. SQL-to-close rates improve because the leads entering the pipeline are genuinely ready.
Real problems, real admin solutions, real outcomes.
A 40-person digital marketing agency had 6 super admins in HubSpot. Over 18 months, the Contact object accumulated 312 custom properties. "Lead Source," "Marketing Source," "Original Lead Source," "Traffic Source," and "Inbound Source" all existed simultaneously. Nobody knew which one to fill in. Reports showed wildly inconsistent source data. The RevOps hire brought in to fix the CRM found the property settings page unusable.
Admin solution
- 🔍Audit phase (week 1): Exported all properties to CSV. Sorted by "last used date" — 180 of 312 custom properties had zero records filled in the last 12 months. Immediately archived all 180.
- 🔗Merge phase (week 2): Identified 14 groups of duplicate properties. For each group: decided the canonical property, exported all data from the duplicates, re-imported into the canonical property, then archived the duplicates.
- 📋Documentation phase (week 3): Added descriptions to all remaining 64 active custom properties. Created a "Property Registry" Google Sheet documenting each property's purpose, owner, and fill instructions.
- 🔒Governance phase (week 4): Removed Super Admin access from 4 of the 6 admins. Set up a "Property Request" process — anyone wanting a new property submits a form, admin reviews within 48 hours, checks for existing alternatives first.
Source attribution accuracy went from 34% to 91% within one quarter. The CEO was able to see, for the first time, which channels were actually generating closed revenue — not just leads. The RevOps hire's first month ROI was immediately visible.
A SaaS company's previous admin created an "Annual Revenue" property on the Company object as a Single-line text field. Reps entered values like "500k," "$500,000," "500000," "~$500k," and "half a million." The finance team could not build any revenue reports from this data. Sorting by Annual Revenue produced alphabetical, not numerical, results.
Admin solution
- 📋Created a new "Annual Revenue (Verified)" property as Currency type on Company object. Added description: "Confirmed annual revenue in USD. Source: discovery call or LinkedIn. Enter numbers only — no symbols or abbreviations."
- 📤Exported all Company records with the old text property. Cleaned the data in Excel — standardised all values to plain numbers (500000 not "$500k"). Re-imported into the new Currency property.
- 🗄️Archived the old text property. Updated all workflows and reports referencing the old property to use the new one.
- 🚫Added the old property as "Hidden from new object form" and "Hidden from forms" to prevent anyone accidentally using it again while the archive propagated.
Finance could now build ICP-based revenue reports. "Show me all Companies with Annual Revenue > $1M" became a one-click filter. The AE team started using revenue tiers to prioritise accounts — immediately improving their average deal size by 22% within two quarters.
A B2B startup had SDRs manually reviewing every inbound lead to decide who to call first. With 300+ leads per month, this took hours and was inconsistent — some SDRs called cheap leads, others called expensive ones. There was no structured prioritisation and hot leads were often called 3–4 days late.
Admin solution — property-based lead scoring
- 🏗️Created a "Scoring" custom property group on Contact object.
- 📊Created "Demographic Score" (Number), "Behavioural Score" (Number), and "Total Lead Score" (Number) custom properties.
- ⚙️Built demographic scoring workflow: Job Title contains "VP" or "Director" → +20. Company Employees > 200 → +15. Industry = SaaS or FinTech → +10. Country = US or UK → +5.
- ⚙️Built behavioural scoring workflow: Visited pricing page → +15. Opened 3+ emails → +10. Attended webinar → +20. Filled contact form → +25. Score decays by 5 points if no activity in 30 days.
- 📋Created an active list: "Hot Leads — Score > 60." SDR team's morning call queue is this list, sorted by Total Lead Score descending.
- 🔔Notification workflow: when a Contact's Total Lead Score crosses 70 → immediate Slack notification to the assigned SDR: "🔥 Hot lead alert — [Name] at [Company] just hit score 74."
Average lead response time dropped from 3.2 days to 4 hours for high-score leads. MQL-to-SQL conversion rate increased from 18% to 31% within one quarter. The SDR team spent 70% of their time on leads that eventually converted — up from 40%.
The most frequent property mistakes — and how to avoid each one.
-
1. Using the wrong field type and realising it too late"Annual Revenue" stored as Single-line text. "Lead Score" stored as a text field. "Timeline" stored as a number instead of a dropdown. You can't change most field types after creation — you have to delete and rebuild, losing all historical data. Fix: choose field type deliberately, using the decision guide, before saving.
-
2. Creating duplicate properties"Source," "Lead Source," "Marketing Source," and "Original Source" all existing simultaneously. Reps don't know which to fill. Reports are split across four fields. Fix: search existing properties before creating. If one already exists, use it.
-
3. Never filling in the description fieldSix months later, nobody knows what "Flag B" means or why it was created. Fix: every custom property gets a description before it goes live. Treat it as required documentation.
-
4. Making too many fields requiredIf 14 properties are required to save a Contact, reps enter "n/a," "unknown," or random values just to get past the validation screen. Fix: limit required properties to 3–5 critical fields per object. Let rep adoption drive data quality for non-critical fields.
-
5. Not understanding the "don't overwrite" setting in workflowsA workflow overwrites a rep's manually-set Lead Status back to "New" every time a new form is submitted. The rep's work is silently erased. Fix: enable "Don't overwrite existing values" on any workflow action that sets a property which may have been filled by a human.
-
6. Using Single checkbox where a Dropdown with Yes/No/Unknown is better"Budget Confirmed" as a single checkbox has three states: checked (yes), unchecked (unknown — not no). For true Yes/No/Unknown tracking, a Dropdown with those three options is cleaner and more reportable. Fix: understand the three-state nature of checkboxes before using them for yes/no logic.
-
7. Dumping all custom properties into the default "Contact Information" groupThe record sidebar becomes 40+ properties long, all mixed together. Reps can't find anything. Fix: create named custom groups by function — "Qualification Data," "Marketing Attribution," "CS Fields." Keep the default groups for HubSpot's own properties.
-
8. Never archiving old propertiesProperties from campaigns from 3 years ago, old qualification frameworks, deprecated fields — all still cluttering the property picker and confusing new reps. Fix: quarterly archiving review. Anything with 0 fill rate in 12 months gets archived.
The standard RevOps deliverable — document every custom property for governance and onboarding.
A Property Registry is a living document (usually a Google Sheet or Notion table) that lists every custom property in your HubSpot portal — with its purpose, owner, field type, fill instructions, and status. It's your internal CRM documentation. Having one immediately signals senior admin capability in any interview or client project.
Sample property registry — Contact object
Property label · Internal name · Object · Field type · Group · Purpose / fill instructions · Who fills it (rep / workflow / integration / admin) · Required? · Hidden from forms? · Date created · Created by · Status (Active / Archived)
Questions you should be able to answer confidently — with model answers.
Everything you need to remember — in one place. Save this for quick reference.
14 field types at a glance
| Field type | Stores | Key rule |
|---|---|---|
| Single-line text | Short freeform text | Use only for truly freeform data — if options are fixed, use Dropdown |
| Multi-line text | Long paragraphs | Can't filter or segment — don't use for structured data |
| Number | Numeric value | Required for calculations, averages, and numeric comparisons |
| Currency | Monetary amount | Always use instead of Number for money — auto-formats correctly |
| Date picker | Calendar date (no time) | Enables date-based workflow triggers (X days before/after) |
| Date and time | Full timestamp | Stored in UTC — set portal timezone correctly first |
| Dropdown select | One option from a list | Best for long lists with one correct answer |
| Radio select | One option from a list | Best for short lists (2–5 options) shown all at once |
| Checkboxes | Multiple options from a list | Use when multiple answers are valid simultaneously |
| Single checkbox | True / Unknown (not False) | Unchecked ≠ false — it means unknown. Design workflows accordingly |
| Email address | Validates format. Primary email = deduplication key for contacts | |
| Phone number | Phone string | Enables click-to-call from HubSpot — always use for phone fields |
| URL | Web address | Makes values clickable — use for LinkedIn, website, booking links |
| Score | Auto-calculated number | Cannot be manually edited — built via HubSpot lead scoring settings |
Key rules to remember
- 🔒Internal name is permanent — set your label correctly before saving. The internal name cannot be changed.
- ⚠️Most field types cannot be changed after creation. Plan your field type before creating.
- 🔄Last write wins — the most recent update to a property overwrites the previous value. Use "Don't overwrite" in workflows to protect human-entered data.
- ☑️Single checkbox unchecked ≠ false — it means the value is unknown/not set. Build workflow conditions using "is known" not "is equal to true."
- 📋Always fill in descriptions — every custom property must have a description explaining its purpose and how to fill it.
- 🗂️Custom group first — create a named custom group before adding custom properties. Never dump custom properties into HubSpot's default groups.
- 📊Maintain a Property Registry — the #1 governance tool for any CRM admin. Document every custom property with purpose, owner, and status.
- 🔍Search before creating — always check if a property already exists before creating a new one. Duplicates are the most common CRM data quality problem.
Properties are not just form fields — they are your data architecture. Every downstream function in HubSpot (segmentation, automation, reporting, scoring, personalisation) depends on properties being correctly typed, consistently named, and reliably populated. Before building any workflow, campaign, or dashboard — a RevOps professional asks: "Do I have the right properties to support this?" If not, they design the properties first. Property design is always the foundation. Everything else is built on top of it.
HubSpot Properties — Complete Admin Reference
14 field types · All settings · 3 case studies · Property registry template · Interview Q&A · Admin governance framework. Keep this alongside your HubSpot sandbox for reference during practice sessions.