How to list contract and freelance work on your résumé
I spent a stretch of my career as a contract project manager — brought in through a consulting firm, working on a company's projects, before that same company converted me to a direct role. On paper, that stretch was the most honest, hardest work I'd done. On my résumé, it looked like a problem: a short stint under a company name most people had never heard of, followed by a "new" job at the client. A reader skimming it fast would see two short jobs and wonder why I couldn't hold one down.
That's the whole trap with contract and freelance work. The work is real. The way it lands on the page makes it look like job-hopping. Here's how to fix that so your history reads as one clear story instead of a list of things that didn't last.
The reader can't tell contract from quitting — so tell them
A recruiter scanning your résumé for six seconds doesn't know a role was a six-month contract that ended because the contract ended. They see a start date, an end date five or eight months later, and they fill in the blank with the worst explanation: you left, or you were let go.
The single highest-return fix is one word. Label the role. Put "(Contract)" or "(Freelance)" or "(Consultant)" right on the title line:
Project Manager (Contract) — Placement Agency, on assignment for a manufacturing client · 2022–2024
Now the short duration explains itself. A contract that ran its length isn't a red flag; it's a contract that ran its length. You've taken the scariest thing about the entry and turned it into the most normal thing about it, for free.
Get the employer line right: agency or client?
Contract work has a "who did you actually work for" question that trips people up. If you were placed through a staffing agency or consulting firm, they were your legal employer — they paid you, they issued the W-2 or the 1099. But the work happened at the client, and the client's name is often the one that carries weight.
You don't have to choose. Name both. Lead with the client's work, name the agency plainly:
Facilities Project Engineer (Contract via Placement Agency) — grounds and construction projects for a manufacturing client
This is honest — you're not claiming the client hired you directly — and it gives the reader the recognizable context and the accurate employment fact in one line. Never imply the client employed you if they didn't. That's the kind of small stretch that unravels in a background check, and it's not worth the half-inch of extra shine.
Group short gigs so five projects read as one role
If you freelanced or contracted through a run of separate short engagements, listing each as its own job is what actually creates the job-hopper look — five entries, none longer than a few months, stacked on top of each other.
Group them. Make one umbrella entry for the period, then list the engagements as bullets underneath:
Independent Consultant / Freelance · 2019–2022
- Built the bid-estimating process for a regional civil contractor (6-month engagement)
- Ran project scheduling for a commercial subcontractor across 3 concurrent jobs
- Managed vendor negotiations for a facilities buildout, cutting the awarded contract price by a double-digit percentage
Now the reader sees one continuous three-year period of consulting work with a list of real accomplishments under it — not five nervous little jobs. Same facts. A completely different read. This is the same move a career-change résumé makes: you control how the reader parses your history by how you group it, not by hiding anything.
Dates: close the gap that isn't a gap
Contract work often leaves small holes between engagements — three weeks here, two months there while you lined up the next one. Those tiny gaps look worse than they are when every entry carries exact months.
Use year ranges (2019–2022), not months, across a freelance period. It's a standard, accepted convention, and it smooths the normal rhythm of contract work into a continuous block. You're not lying about anything — you're just not inviting a six-second skim to interrogate a two-week gap between a project that ended in March and one that started in April.
If you're asked about specifics in an interview, answer plainly. "Those were contract engagements, so there was usually a short stretch between them while I found the next one" is a completely normal sentence that closes the question in one breath.
The contract-to-hire move: show it as continuity
If a contract turned into a full-time job at the same place — the best outcome contract work offers — don't split it into two entries that make it look like you started over. Stack it under one company with the progression visible:
Manufacturing Company · 2022–2025
- Project Engineer (direct hire), 2024–2025
- Project Manager (contract via placement agency), 2022–2024
That ordering tells the real story in the shape of the entry: you came in on contract, you were good enough that they kept you, you moved up. A contract-to-hire that reads as one continuous rise is one of the strongest things a résumé can show, because someone already made the bet on you and it paid off. Don't hide the origin — the origin is the point.
Quantify the work, not the contract
The instinct with short engagements is to describe the arrangement — "6-month contract to support the PMO." Nobody's impressed by the length of a contract. They're impressed by what you did inside it.
So spend your bullets on outcomes, same as any other role: what you built, what you moved, what you closed, in numbers where you have them. A contract that delivered a measurable result reads as a professional who gets dropped into a problem and solves it — which is exactly what contract and freelance workers are, and exactly the thing most full-time résumés can't claim.
A note on ATS, and on honesty
Most postings pass through an applicant tracking system before a human reads them, and that system matches on the words in the job description. Your title line matters here: "Project Manager (Contract)" still contains "Project Manager," so labeling the role costs you nothing in keyword matching. Write the title the way the target job writes it, add the contract label in parentheses, and you keep both the filter match and the honesty.
That honesty part is the whole game. Everything above is about framing true facts so a fast reader parses them correctly — grouping, labeling, date ranges, ordering. None of it invents a job you didn't have or a client that didn't hire you. The line I won't cross, in my own résumé or in the tool I built, is turning contract into permanent or a placement into a direct hire. Get caught doing that and you lose the thing the résumé exists to build, which is trust.
I built ResumAI after tailoring my own résumé by hand through three industry changes and a stretch of contract work. It keeps a single master résumé — every role, every engagement, the full history — and tailors a version to each specific posting, so you decide which contract gigs to group, expand, or lead with for this job without rebuilding the whole thing each time. It scores that tailored version against the posting so you can see the keyword gaps before a machine does. And it's privacy-first: your work history is yours, not training data. The tool gets you to a fast, honest draft. Making it true stays with you — that part always does.
The one thing to do today
Open your résumé and find every contract or freelance role. Add the one word — "(Contract)," "(Freelance)," "(Consultant)" — to each title line. That's five minutes, and it removes the single most common reason a reader misreads your history. Then look at whether any run of short gigs should collapse into one umbrella entry. If it should, that's the second five minutes, and between them you've turned the scariest part of your résumé into a plain, professional record of someone who shows up and delivers.