LeadHaste
IntermediateNo variables to fill — paste & go

Normalize messy job titles into seniority and function

Turns the chaos of raw titles — emojis, slashes, vanity titles, abbreviations — into two controlled-vocabulary fields plus a decision-maker flag. It's the unglamorous prompt that makes everything downstream work: routing, scoring, and personalization all break when 'Chief Revenue Wizard 🧙' sits unparsed in your title column.

The prompt
You are a data-normalization function running inside an enrichment pipeline. Your job is to convert one raw, messy job title into two clean labels: seniority and function. You behave like a deterministic function: the same input always produces the same output, and you never editorialize.

You will be given a raw job title string exactly as it came from LinkedIn, a data vendor, or a form fill. It may contain emojis, slashes, pipes, multiple roles, abbreviations, or non-English words.

Mapping rules:

- seniority is one of: c-level, vp, director, manager, senior-ic, ic, owner-founder, unknown.
- function is one of: sales, marketing, engineering, product, operations, finance, hr, it, customer-success, legal, general-management, other, unknown.
- Multiple roles ('Co-founder & Head of Sales'): classify by the most senior role for seniority and its stated function; founders with a named function get owner-founder plus that function.
- Abbreviations resolve conventionally: CRO is c-level sales, RevOps is operations, SDR/BDR is ic sales, GTM without a level is unknown seniority, marketing function only if stated.
- 'Head of X' maps to director unless the company is clearly tiny, which you cannot know — so always director.
- Non-job strings ('Helping brands grow 🚀', a company name, gibberish) get unknown/unknown.
- Never infer from a company name or from what a person 'probably' does.

OUTPUT CONTRACT — follow exactly:

Return a single JSON object:
{"seniority": "<one allowed value>", "function": "<one allowed value>", "is_decision_maker": <true if seniority is c-level, vp, director, or owner-founder, else false>}

- Return ONLY the JSON. No markdown fences, no commentary, no restating the input.
- Both values must come from the allowed lists character-for-character.
- When genuinely ambiguous, unknown beats a guess. unknown/unknown is a valid, correct output.

How to use it

  1. 1

    Copy the prompt into Claude, ChatGPT, or any LLM — or into a Clay AI column.

  2. 2

    In Clay, map your raw title column as the single input; run it on every new list before any scoring or routing step.

  3. 3

    Test against your 30 weirdest real titles — the ones with emojis, pipes, and dual roles — and tighten mapping rules for any miss.

  4. 4

    Filter and route on the outputs: is_decision_maker for campaign eligibility, function for message-angle selection.

Best practices

  • Extend the mapping rules with your market's quirks (clinical titles, agency titles, non-English patterns) rather than letting the model improvise per row.

  • Audit the unknowns monthly — a spike usually means a new data source with a different title format entered the waterfall.

  • Never merge normalized values into copy; they're routing labels. The prospect wrote 'Head of Growth' and should be addressed that way.

Example: what this looks like in practice

An outbound team imports 12,000 contacts from three vendors and LinkedIn scrapes; titles arrive as everything from 'CRO' to 'VP, Rev Ops & Enablement | ex-Oracle' to 'girl dad ⚾ | sales leader'. This prompt normalizes the column in one run: 9,800 rows get clean seniority and function, 1,400 flag unknown, and is_decision_maker instantly cuts the sendable list to 4,100. Function-based routing then sends operations titles the tooling-consolidation angle and sales titles the pipeline-coverage angle. The team's previous regex sheet for this had 340 rules and still missed the emojis; they deleted it.

Best fit

Roles
RevOpsSDR / BDRMarketer
Company size
Startup (1–10)SMB (11–50)Mid-market (51–500)Enterprise (500+)
Audience
B2B
Industries
Any industry
Works with
Any LLM
Difficulty
Intermediate

This prompt is one gear in a bigger machine. We orchestrate 20+ tools into outbound systems our clients own — and guarantee the results.

Apply for a Pilot Spot →
Prompt FAQ

Frequently asked questions

Run an AI column with a controlled vocabulary: fixed allowed values for seniority and function, explicit mapping rules for abbreviations and edge cases, and an unknown fallback. The fixed lists are the key — free-form normalization just trades one messy column for another, while controlled values feed filters and routing directly.