Writing Job Descriptions with AI Prompts that Stop Breaking

Writing Job Descriptions with AI Prompts that Stop Breaking

1. Prompt templates that break when someone adds one adjective

You’ve got the perfect prompt template: “Write a job description for a [POSITION] including key responsibilities, qualifications, and preferred skills.” Plug it into Zapier’s ChatGPT action or a Notion button, pass in a variable like ‘Head of Growth’, and most days it works. Until someone submits ‘Senior Growth Lead – Remote’ in the form field and the AI returns absolute garbage — like a generic hiring blurb with ‘Remote’ jammed into every sentence.

This happens because large language models over-index on patterns. That hyphen, that casing, that specific combo of title and modifier — it throws off the balance the model expects. I saw one come back with, “We are excited to hire a Remote.” Just that. Nothing else. No matter how many tokens I gave it.

It got worse when the title had quotes in it, like ‘”AI Whisperer”‘. Suddenly you’re looking at XML-style hallucinations with inexplicable closing tags. You can escape characters in code. You cannot escape human creativity in form fields.

The fix that kind of works: don’t just inject titles directly. Pre-clean them. I now drop anything people submit into a Formatter step that:

  • Strips hyphens and quotes
  • Replaces en-dashes with “–” with just dashes
  • Title-cases the string (via Make.com’s Text > Change Case module)

It forces the AI prompt to see the title the way the LLM expects: bland, boring, predictable. Otherwise, you’re just feeding it weird poetry and hoping it turns into a job listing.

2. Why the same exact prompt fails in Make but works in Zapier

I’ve run the same job-desc-generation prompt through both Make.com and Zapier, and they produce radically different results — even when both hit OpenAI’s ChatGPT 3.5 API. Identical input, different completions.

Turns out the difference comes down to message structure. Zapier abstracts their request — they’ve secretly added a system message like “You’re a helpful assistant” above your prompt, but also truncate the user content if it’s near the token limit. Make, on the other hand, gives you raw control — but you have to build the message stack yourself.

In one case, this led to Make replying with literal Markdown bullets and subheaders. Zapier stripped all formatting and returned a single wall of text, no breakpoints. If you’re layering AI outputs into something templated, you’ll want predictable formatting. And you won’t get that unless you test the full system output — not just the prompt in isolation.

Aha moment: I ran a raw GPT call inside a Code by Zapier step and printed the resulting JSON. It included an internal system prompt saying, “Answer as a professional recruiter.” I hadn’t written that. That came from Zapier’s logic stack. Not great if you want the AI speaking in your brand voice.

3. What actually breaks when you use voice tone in prompts

This one got subtle. I wanted the AI to match our hiring tone — part formal, part playful, no nonsense. So I did what every blog post suggests: I added “Use a friendly, concise voice with a slightly informal tone.”

Every fifth response turned surreal. Like: “Are you a wizard at spreadsheets? We need a Spreadsheet Wizard!” Embedded dad jokes, emojis, “we’re hiring rockstars” lingo — despite me not saying any of that.

I removed the tone guidance entirely. Prompt just said what needs to be generated. Output instantly got tighter, more consistent. Apparently “slightly informal” sets off a thousand bad marketer examples inside the model’s training data.

If you still want tone control without the chaos, you’ll need to sandbox the tone itself. I now prepend a sample paragraph before the prompt starts:

“Here’s an example of the voice we like: We’re looking for someone who’s great at solving problems without making a mess — and who knows when to ask the dumb question. The tone should stay between straight-talking and respectful.”

That works better than any adverb will.

4. Undocumented token limits that silently mutate your job listing

You’d think passing a prompt under 3000 tokens to GPT-3.5 would be safe, but there’s a hidden Zapier quirk: Zapier’s OpenAI action doesn’t just send your prompt. If you include previous messages (like interview questions or hiring goals), that conversation history eats up space. And once the full payload hits too close to the model’s limit? It just…clips the end. No warning. No error. Just a job description missing the last paragraph.

I found this while comparing logs between an Airtable-recorded version and what the recruiter saw in the email. Airtable had the full description. Email cut off halfway through “Key Responsibilities.” I had no idea why — until I dumped everything through OpenAI’s Tokenizer tool.

By the time you add:

  • Pre-prompt instruction (‘you’re a recruiter bot’)
  • 3 chat message nodes
  • Job values like title, location, department

You’re scratching 3,900 tokens. Zapier doesn’t tell you it’s trimming. But it does. Now I count tokens pre-send in Make by calling OpenAI’s tokenizer endpoint via HTTP module. Ugly fix, but it’s the only way I’ve found to prevent stealth truncation.

5. How translations throw off skill sections unless you do this

This one hit when we started using the same prompt to write listings in other languages. Spanish and French were consistent enough. But German and Polish outputs completely ignored the “Preferred Qualifications” section half the time. Literally skipped it.

The cause wasn’t the prompt — it was our prompt token padding. English is compact. German runs long. So a “smaller” prompt in English becomes a bloated monster when translated or interpreted in another tongue. That bloat causes the model to skip content it sees as non-essential once token fatigue kicks in.

How I fixed it:

  • Switched max_tokens to 1000 instead of 750
  • Rewrote prompt in bullet-first format: ask for 3 bullets per section, instead of full paragraph style
  • Hardcoded section headers — even in multilanguage — instead of asking model to invent them

Something about the bullets told the model: you actually must include three things here. No bullet gap allowed. It’s weirdly more reliable than asking for structured prose.

6. How renaming one label in Airtable caused a full fail cascade

I renamed the Airtable single-select field from “Role Type” to “Title Level” — no warning anywhere. Prompt input stopped working, which… makes sense. But instead of erroring, the AI prompt defaulted to “junior developer” because of a fallback config I’d totally forgotten about in Zapier Filters. It went unnoticed for two long days. We posted six listings calling for interns. Those roles were meant to be director level.

The downstream mess:

  • Zapier prompt failed silently
  • Filtered path assumed missing field = junior
  • Preview copy generated and published by another teammate
  • Nobody caught it until we had replies from confused juniors asking about relocation

Now every field name change gets logged in a shared Notion page, with a checkbox: “Check all automation inputs.” Clunky, but the price of not doing it was incredibly real-world embarrassing.

7. Avoiding hallucinated duties with repeat-job prompts

When regenerating job descriptions for the same role multiple times, the AI starts mixing in weird extras. Ran three prompts for “People Ops Manager.” First version? Solid. Second? Added “Team yoga scheduling.” Third? Claimed the person would “Establish conflict resolution ceremonies.” That is not a thing. Nobody wants that.

It gets worse if the AI thinks you’re rewriting something that already exists. Swapping in new location values or new hiring leads? It starts inventing context you never gave it. It assumes you’re updating a past draft, so it fills in gaps with panicked creativity.

Best way I’ve found to stop this: treat every job description as a fresh, isolated thread. Don’t pipe in previous descriptions or values unless retriggering that same version deliberately. I use separate storage tables for each generation attempt now — the scope mess got too hard to trace otherwise.

8. Cleaning copy paste glitches before prompts wreck token boundaries

This one’s low-level but deadly. Someone pastes responsibilities from an old listing into the source input, but the text carries smart quotes, symbol bullets, or invisible carriage breaks. AI eats those weirds just fine, but they balloon token use like crazy. I’ve seen a 300-character field jump to 1100 tokens just from Unicode junk.

Cleaner fix than I expected: I now pipe every pasted field into Make’s Text > Replace with regex step. Kill smart quotes, nonbreaking spaces, and EM dashes. Then route that into OpenAI. It fixed so many strange edge failures.

You can’t trust what humans paste, and the UI won’t show the junk. Markdown parsers will. But only after the AI has become incoherent.