A freelance or contract developer's CV reads best when the engagements are grouped so a reader sees a continuous run of client work, not a list of short jobs that each look like they simply ended. The main structural choice is grouping: give "Freelance Software Developer" its own heading with a single overall date range, then list each client engagement underneath it as a shorter entry with its own dates, rather than giving every client a separate top-level block on the same page as regular employment. Everything else, what to name each client, how to describe an agency placement, and what to say about work covered by a non-disclosure agreement, follows from that same choice.
Why grouping matters more than any individual entry
A CV that lists six separate one- to four-month client engagements as six separate top-level roles can read, at a glance, like six separate jobs that a candidate left in quick succession, even when every one of those engagements ended exactly on schedule because the contract was always fixed-term. Grouping them under one freelance heading removes that misreading before a reader has to make it: the heading itself states the arrangement plainly, and each engagement underneath reads as a project within an ongoing practice rather than a job on its own. This is a presentation choice, not a change to the underlying facts, and it works precisely because it is accurate: contract work is a continuous activity even when any single client relationship is short.
Naming the agency and the end client
Freelance and contract work often runs through a staffing agency or a consultancy rather than a direct contract with the company the work was actually done for, and a CV entry reads more credibly when it names both, where it can. A pattern that works well: "Client: [Company], via [Agency]" as a subheading line, followed by the same task-and-outcome bullets any other role would get. Where naming the end client is not possible, because of confidentiality or because the agency handled several unnamed clients in the same sector, naming the industry and the kind of company instead, "a mid-size logistics company" or "an e-commerce retailer", still tells a reader more than the agency's name alone would.
What to say about work covered by an NDA
Client work under a non-disclosure agreement does not need to disappear from the CV, and it does not need the client's name to still read as a credible entry. What an NDA usually restricts is naming the client and specific proprietary detail, not the shape of the work itself: the kind of system built, the stack used, the scope of the engagement, and a defensible, non-specific description of the outcome are all things a reasonable NDA leaves available to describe. "Confidential fintech client" or "a healthcare technology company (name withheld under NDA)" is a normal, well-understood phrasing that a reader will not read as evasive, since NDA-covered contract work is common enough that most readers recognise the convention on sight.
Between contracts
Gaps between contract engagements are common in freelance and contract work, and they generally need less explanation than an unexplained gap inside a full-time career, since a reader evaluating a contractor's CV already expects some space between engagements as a normal feature of the work rather than a sign something went wrong. Where a gap runs longer than what a reader would expect as ordinary between contracts, the same approach as any other employment gap applies: a short, calm, factual line placed exactly where the gap falls in the timeline, covered in more depth in explaining an employment gap on your CV.
Illustrative example: a grouped freelance-engagement entry
Illustrative example, not a real client or a real result.
Freelance Software Developer, 2022-Present
- Client: a mid-size logistics company, via a staffing agency (2023-2024): rebuilt a shipment-tracking dashboard from a legacy jQuery frontend to React, reducing the number of manual status-check tickets the operations team filed each week.
- Client: confidential fintech client (name withheld under NDA), (2022-2023): built and maintained a set of internal reporting APIs consumed by three other teams.
The heading carries the overall date range and the freelance arrangement once, and each client line underneath carries its own dates and its own task-and-outcome bullets, without repeating "Freelance Software Developer" for every single client.
Fitting many short engagements onto a readable page
A freelancer with several years of client work can end up with more individual engagements than a full-time career would produce in the same period, which raises the same page-length question a candidate with many side projects runs into. Fitting a one-page CV when you have many engineering projects covers choosing which entries earn full detail and which get folded into a shorter closing line, and the same filter, relevance to the target role over sheer chronological completeness, applies just as well to a list of past clients as it does to a list of side projects.
Naming a range of stacks without looking scattered
A contractor's client list can span several different stacks in a way a single-employer career rarely does, one client's codebase in Python and another's in TypeScript, for instance, and that range can read as unfocused if it is not framed deliberately. Leading the summary with the kind of work that stays constant across clients, backend systems integration, frontend rebuilds, or whatever the actual throughline is, before the skills section lists the individual languages and tools, gives a reader a consistent identity to hold onto even where the specific technology changed from one engagement to the next. A skills section grouped by category rather than left as one long unsorted line helps here too, since it lets a reader see the breadth at a glance without needing to infer a pattern from six differently worded bullets.
Build yours
CVBuilderKit's Developer template is built around project- and ownership-led entries, which fits a grouped freelance work history as naturally as it fits a single employer's experience section. Start from it, or from a blank document, in the builder, and group your client engagements under one freelance heading before you start filling in the detail underneath each one.
