Objects and properties: the structure of your CRM
Before creating custom properties, you need to understand HubSpot's data model. There are four primary objects: Contacts (records of people), Companies (records of organisations), Deals (records of potential or closed sales), and Tickets (records of service inquiries).
Think of an object as a bucket and the properties as the golf balls inside it. The Contacts bucket holds golf balls like first name, last name, email, phone number. The Deals bucket holds golf balls like amount, close date, deal stage. Every property belongs to exactly one bucket. "Annual Revenue" is a company property. "Email" is a contact property. "Deal Stage" is a deal property.
When you create a custom property, the first decision is which object it belongs to. Get this wrong and you'll have deal data on contacts or contact data on companies, which breaks your reporting and confuses your team.
Default properties versus custom properties
Default properties are created by HubSpot and exist in every account. They cover universal data points: names, emails, dates, amounts. You can't delete most default properties, but you can choose not to use them.
Custom properties are the ones you create to capture what makes your business different. A recruitment agency needs "Years of experience" on contacts. A SaaS company needs "Contract end date" on deals. A consultancy needs "Project type" on companies. These are the data points that separate a generic CRM from one that actually reflects how your business operates.
The key question before creating any custom property: will someone use this data for segmentation, reporting, automation, or personalisation? If the answer is "not right now, but maybe later", wait. Empty properties are noise. Full properties are signal.
Property types and when to use each
HubSpot offers several property types. The choice matters because it determines how you can filter, report, and automate:
Dropdown select. A predefined list of options where the user picks one. This is your workhorse for clean data. Use it for anything with a finite set of values: industry, region, product interest, lead source category. Dropdowns are easy to report on, easy to segment by, and impossible to misspell. This should be your default choice.
Multiple checkboxes. Like dropdown but allows multiple selections. Good for things like "Interested products" where a contact might care about more than one offering.
Number. Numeric values you can calculate and report on. Use for "Number of employees", "Contract value", "Lead score". Anything you might want to sum, average, or set a threshold on.
Date picker. A date field. Use for "Contract renewal date", "Last review date", "Event date". Dates enable time-based automation: "30 days before contract renewal, create a task for the account manager."
Single checkbox (boolean). A yes/no toggle. Use for flags like "Is partner", "Opted into beta", "Has completed onboarding".
Single-line text. Free-form short text. Use this sparingly, and only as a last resort. Free text is hard to report on and impossible to segment reliably. You'll end up with "UK", "United Kingdom", "GB", and "England" all representing the same thing. If you can define the options in advance, use a dropdown instead.
My rule of thumb: default to dropdown selects. Reserve free text for genuinely unique values like "Referral source name" where no predefined list makes sense.