How-to guide

How to design a CRM field schema

Every CRM starts clean and ends as a 200-field swamp because nobody owns the schema. This guide gives RevOps an opinionated process to decide which fields exist on accounts, contacts, and opportunities, which are required at each stage gate, and which drive reporting. Follow the steps in order. Trim the ones that argue for new fields and keep the ones that argue for governance, and your team will stop debating field placement in every weekly meeting.

Before you start

What you need.

Time: 1-2 weeks for first design, quarterly reviews after

  • A named RevOps owner for the schema with authority to approve or reject new field requests
  • A written list of the reports, forecasts, and automations the business actually runs today
  • Sales, marketing, and CS leadership agreement that RevOps owns the field change-control process
  • Admin access to CRM metadata so you can inventory existing fields, usage, and fill rates
  • A sandbox tenant to validate the proposed schema before cutting over production records
Design a CRM field schema

Step by step.

  1. 1

    Start with the reports and the stage gates, not the fields

    Fields exist to serve reports, forecasts, routing rules, and stage transitions. If no downstream artifact reads a field, the field should not exist. Start by listing every pipeline report, forecast view, segmentation query, and automation your team runs today, then write down which fields each one reads. This becomes your required field list. Everything else is a candidate for deprecation. Teams that skip this step design schemas by committee and ship 40 fields nobody will fill. Teams that do this step ship 15 fields reps will actually keep up to date.

    • List every pipeline, forecast, and segmentation report the team runs weekly or monthly
    • List every routing rule, scoring model, and workflow trigger that reads account or contact data
    • Map each report and automation to the exact fields it reads
    • Any field not referenced by a report, workflow, or stage gate goes on the deprecation candidate list
    Tip: If a VP says 'I need that field for a report,' make them point at the report. If the report does not exist yet, the field waits until the report does.
  2. 2

    Define the core object spine for accounts, contacts, and opportunities

    Every B2B CRM needs the same lean spine before you add anything custom. For accounts: name, domain, industry, employee count, country, owner, type (prospect, customer, partner), lifecycle stage. For contacts: first name, last name, email, phone, title, role (economic buyer, champion, user, blocker), account, owner. For opportunities: name, account, amount, close date, stage, forecast category, primary contact, product line, source. These 25 fields cover 80% of real reporting needs. Resist the urge to add vanity fields until you can prove the spine is working end to end.

    • Lock the account spine to the eight fields above and reject new account fields for the first 30 days
    • Lock the contact spine with a required role picklist so reps cannot leave the buyer map blank
    • Lock the opportunity spine with amount, close date, stage, and forecast category as non-null
    • Document the spine in your admin wiki as the frozen core and treat anything else as discretionary
    Tip: A field on the spine means every record of that object has it populated or the record is invalid. Spine fields earn the right to be required because the business cannot operate without them.
  3. 3

    Classify every field by purpose: reporting, routing, stage-gate, or display

    Fields do different jobs and deserve different rules. Classify each proposed field into one of four buckets. Reporting fields feed dashboards and forecasts, must be high fill rate, and should be picklists wherever possible. Routing fields drive assignment and territory logic, must be populated at create time, and must be picklists. Stage-gate fields are required at specific pipeline stages, enforced by validation. Display-only fields are useful context but never read by a report or workflow, kept lean because reps have to look at them. If a field does not fit a bucket, it does not get built.

    • Tag every existing field as reporting, routing, stage-gate, or display
    • Reporting and routing fields default to picklist values with no free-text escape hatch
    • Stage-gate fields get required-at-stage validation, not required-always
    • Display fields that no human has looked at in 90 days become deprecation candidates
    Tip: The classification is the field's job description. If two admins would classify the same field differently, your rules are not tight enough yet.
  4. 4

    Set required-at-stage rules on opportunities, not required-always

    Making every important field required on create is the single fastest way to train reps to type garbage. Instead, tie required fields to the pipeline stage where the data actually needs to exist. At Qualification: primary contact, pain, budget authority. At Proposal: product line, amount, close date, decision criteria. At Negotiation: redlines status, procurement contact. At Closed Won: signed order, start date, product mix. Validation blocks the stage transition when a required field is empty, so the schema teaches reps where data belongs in the sales motion rather than nagging them on first keystroke.

    • Define the three to five fields that must exist to advance out of each stage
    • Enforce required-at-stage with validation that blocks the transition, not the record save
    • Keep the required list per stage to five fields or fewer so reps can actually clear the gate
    • Expose the gate requirements in the opportunity UI so reps know what is blocking the move
    Tip: Required-always fields punish the top of funnel. Required-at-stage fields reward progress. Pick the second one every time.
  5. 5

    Govern picklists with a canonical list and no free-text escape hatch

    Picklist drift is how clean schemas rot. Every categorical field (industry, country, lead source, stage, role, type) gets a canonical value list owned by RevOps and locked against free-text entry. New values go through a change request that proves the business reason, the report that will read it, and the deprecation plan for retired values. No 'other' bucket, because 'other' becomes 40% of your records within a year. If a rep needs a value that is not on the list, that is a signal the list needs a review, not a signal to open a text field.

    • Publish the canonical value list for every categorical field in the admin wiki
    • Disable free-text and admin-only 'other' options on every reporting and routing picklist
    • Route new picklist value requests through a weekly RevOps change board, not into individual admin DMs
    • Deprecate picklist values with a crosswalk and a bulk update, never by leaving them orphaned
    Tip: Country and Industry are the two picklists worth governing on day one, because routing, segmentation, and territory rules read from them and quietly break when values drift.
  6. 6

    Separate RevOps-owned fields from team-owned custom fields

    Not every field needs RevOps approval, and pretending otherwise just creates a bottleneck. Draw a bright line between the shared schema (RevOps owns, cross-team reporting reads) and team-owned fields (one team uses, no cross-team report depends on it). Marketing wants a field for campaign attribution they alone will read: fine, mark it marketing-owned, keep it off the shared reporting layer. CS wants a field for health score inputs they alone will use: fine, mark it CS-owned. The rule is simple. Cross-team reporting fields need RevOps governance. Single-team display fields do not. This stops the political fights and keeps the shared schema lean.

    • Flag every field as shared (RevOps-governed) or team-owned (that team governs)
    • Shared fields need a report consumer in two or more teams or they get downgraded to team-owned
    • Team-owned fields can be free-text or picklist, team's call, but never show in cross-team dashboards
    • Review the shared versus team-owned split quarterly as reporting needs evolve
    Tip: If the request is 'I want a field,' ask who else will read it. If the answer is nobody, it is a team-owned field and does not go through the full RevOps change board.
  7. 7

    Design the deprecation path before you add new fields

    A schema that grows is a schema. A schema that only grows is a swamp. Before you ship any new field, write the deprecation condition for it: when fill rate drops below a threshold, when the report that depends on it is retired, when the business process changes. Run a monthly deprecation sweep that reads fill rate, last-used date, and consumer count, then flags candidates. The admin wiki lists every deprecated field, when, and why, so new teammates do not reinvent the same field six months later. Teams that build the deprecation path first stay at 30 fields. Teams that do not land at 200.

    • Write a deprecation condition for every new field at the moment it ships
    • Run a monthly automated report on fill rate, last access, and consumer count per field
    • Flag fields below 20% fill rate or with zero report consumers as deprecation candidates
    • Archive deprecated fields with a crosswalk if any report ever read them
    Tip: Adding a field is a two-step job: define it and define how it dies. Teams that only do step one own the 200-field monster.
  8. 8

    Validate the schema in sandbox and roll out with a migration crosswalk

    Never ship schema changes directly to production. Build the proposed schema in a sandbox tenant, migrate a representative sample of records using a crosswalk from the old fields to the new ones, and dry-run the full report suite and automation pack against the migrated data. Compare report outputs before and after. If a report changes unexpectedly, the schema is wrong or the crosswalk is wrong. Only after the sandbox pass is clean do you cut over production, in waves, with a backup and a rollback plan. A schema change that breaks a VP's forecast on Monday morning is how RevOps loses change-control authority for a year.

    • Build the proposed schema in a sandbox tenant and migrate a representative record sample
    • Dry-run every report, forecast, and automation against the migrated sandbox data
    • Diff the report outputs before and after the migration and reconcile every variance
    • Cut over production in waves with a verified backup and a documented rollback plan
    Tip: The sandbox pass is not optional. It is the only thing standing between you and a Monday morning where the CRO's forecast dashboard shows the wrong number.
  9. 9

    Publish the schema, assign owners, and run a quarterly review

    A schema is a living contract between RevOps and every team that reads from the CRM. Publish the field inventory, classifications, owners, picklist canonicals, required-at-stage rules, and deprecation log in a single admin wiki page. Assign a RevOps owner for the shared schema and a named owner for each team-owned field. Hold a quarterly schema review with sales, marketing, and CS leadership to walk the fill-rate dashboard, the deprecation candidates, and the pending field requests. The review is the forcing function that keeps the schema honest. Skip it for two quarters and you will have another 50 orphaned fields to clean up.

    • Publish the full field inventory, classifications, and owners in a single admin wiki page
    • Build a schema health dashboard that shows fill rate, consumer count, and last-used date per field
    • Hold a quarterly schema review with sales, marketing, and CS leadership
    • Treat the review outputs as change-control decisions, not suggestions
    Tip: The schema review is where new fields get approved and old fields get retired. Without the standing meeting, the backlog grows and the swamp returns.
Avoid

Common mistakes.

  • Letting every team add fields without a RevOps change board, which creates the 200-field monster within 18 months
  • Making important fields required on create instead of required at the stage where the data actually belongs, which trains reps to type junk
  • Allowing free-text or 'other' options on picklists, which quietly destroys every dashboard that reads from them
  • Shipping new fields without a written deprecation condition, so no field ever retires and the schema only grows
  • Rolling schema changes to production without a sandbox dry-run and a report diff, which breaks forecasts on Monday morning
  • Treating team-owned display fields the same as shared reporting fields, which bottlenecks RevOps on requests that do not need governance
FAQ

Frequently asked questions.

How many fields should a healthy CRM actually have per object?

For most B2B teams, a healthy shared schema lands at 15 to 25 fields on accounts, 10 to 15 on contacts, and 15 to 20 on opportunities, with team-owned custom fields layered on top. If you are past 40 shared fields on any object and the fill rate is below 60%, you have a schema problem, not a reporting problem.

Should important fields be required on create or required at stage?

Required at stage, almost always. Required-on-create fields train reps to type garbage so they can save the record and move on. Required-at-stage fields tie the data requirement to the moment in the sales motion where the field actually matters, enforced by validation that blocks the stage transition. Keep the per-stage required list to five fields or fewer so reps can realistically clear the gate.

Who owns the CRM field schema in a well-run RevOps function?

RevOps owns the shared schema and the picklist canonicals, with a named owner per shared field. Team-owned custom fields are owned by the team that uses them, with the rule that they cannot appear in cross-team reports. A standing quarterly schema review with sales, marketing, and CS leadership approves new fields, retires old ones, and keeps the inventory honest.

How do I stop picklists from drifting into 14 variants of the same value?

Lock the field to picklist-only entry with no free-text and no 'other' escape hatch. Publish the canonical value list in the admin wiki and route new value requests through a weekly RevOps change board. Deprecate retired values with a bulk-update crosswalk, never by leaving them orphaned on historical records. Industry and Country are the two picklists worth governing on day one.

What is the right way to deprecate a CRM field without breaking reports?

Write the deprecation condition when the field is first built, run a monthly fill-rate and consumer-count report, and flag fields below 20% fill rate or with zero report consumers. If any report ever read the field, build a crosswalk from old to new values before you archive it. Then migrate affected records in sandbox, diff the reports, and only cut over production once the diff is clean. Document every retired field so nobody rebuilds it six months later.

Where should Strkr AI fit into the schema design process?

Strkr AI is useful for the inventory and classification pass, where it can scan existing fields, surface fill-rate anomalies, suggest deprecation candidates, and propose picklist canonicals from historical values. The RevOps owner still approves every change and the quarterly review still runs. Treat Strkr AI as the analyst that drafts the recommendation, not the decision-maker that ships it.

See it in Strkr

Related product surfaces.

Strkr CRM Platform features

Ready for a CRM that respects your schema?

Strkr ships with picklist locks, required-at-stage validation, and field-level governance so RevOps can design a lean schema and keep it that way. Start free or walk the full platform.

Try it free. Bring your team next week.

No sales call, no migration consultant, no four-month implementation. Enter your card, get 14 days of the full Pro tier, cancel any time before day 14 with zero charge. Spin up a workspace, import your CSV, and have something useful before lunch.