Skip to main content

Resume formatting for cleaner matches

Sweepy scores the words inside your resume file. When it opens the file, it pulls out the text and compares it against job postings. Your formatting decides how much of that text the engine reads.

A second column, a text box, or a scanned page can hide your entire skills list from the engine. One formatting fix often lifts your match scores without changing a word of your experience.

note

This page covers how Sweepy reads your resume. For the scoring formula and the report layout, see Understanding your results.

What Sweepy can read​

Sweepy reads PDF and Word files at resume.path. Point the path at a .docx, and Sweepy reads its paragraphs and tables directly. You don't convert a Word resume first. Keep the .docx when your editor offers both formats. A third-party converter can rebuild the page in a different order, and Sweepy then reads that changed order.

When you need a PDF copy, run Sweepy's own converter. It rebuilds a clean single-column PDF from those same paragraphs and tables. Extraction returns the same words from either file. See Convert any document with --convert.

These problems block extraction:

  • Non-PDF, non-DOCX files. Only a PDF or a DOCX produces text Sweepy can score. A .pages, .odt, .doc, or .txt file gives the engine nothing. Sweepy's converter handles .txt and .md files, and it handles .doc files through Microsoft Word. Export a .pages or .odt file from its own app first.
  • Scanned pages with no text layer. A scan gives Sweepy a picture of words, not words. Sweepy doesn't find a text layer, so scoring falls back to must_have_skills alone.
  • Password-protected PDFs. Sweepy can't open encrypted files. Remove the password before you save the file.
  • Missing or corrupt files. A wrong path logs a warning and skips extraction. Only must_have_skills drives the score then.
caution

When Sweepy can't read your resume and you leave must_have_skills empty, every role scores 75%. That number ranks nothing, because it applies to every posting in the report.

tip

Run optical character recognition (OCR) on a scan before you point Sweepy at it. OCR adds a real text layer. The engine then reads your words. Most scanner apps and PDF editors include an OCR option.

Run the copy-paste test​

Open your resume, select all the text, and paste it into a plain text editor. Plain text shows the extraction order, which a rich text pane can hide.

Copy shortcuts by platform
  • On Windows, open the PDF in Edge, Chrome, or Acrobat. Press Ctrl+A and Ctrl+C, then paste into Notepad.
  • On macOS, open the PDF in Preview and press ⌘+A, then ⌘+C. Switch TextEdit to plain text with ⇧+⌘+T before you paste.
  • On Linux, open the PDF in Evince or Okular, then press Ctrl+A followed by Ctrl+C. Paste the text into an editor such as gedit or Kate.

On a macOS keyboard, ⌘ is the Command key and ⇧ is Shift.

If the paste looks scrambled, empty, or out of order, Sweepy reads the same thing. Fix the file before you run a sweep.

Formatting that breaks a sweep​

Text extractors read straight across the page. Layout changes the order of the text they return. Applicant tracking systems run the same kind of extraction.

FormattingWhat Sweepy reads
Two or more columnsColumns interleave and scramble your text, because the extractor reads straight across the page.
Tables, text boxes, and sidebarsContent can land out of order or merge with a neighbor.
Images, icons, and chartsExtraction skips anything drawn as a picture, including skill bars and logos.
Headers and footersMany parsers skip that region. Keep your name and contact details in the body.
Hyphenated line breaksA term split across two lines (e- then discovery) breaks the whole-term match.
Ligatures and decorative fontsfi and fl ligatures and unusual glyphs can extract as garbage.
Emoji and custom bullet glyphsThese drop or garble. Use a plain hyphen or a round bullet.

What applicant tracking systems prefer​

Applicant tracking systems (ATS) parse hundreds of resumes with the same kind of extraction that Sweepy uses. Give them one clean column of real text.

  • One column, top to bottom. Skip the two-column design with a sidebar.
  • Plain section headings. Use Experience, Education, and Skills. Avoid tables and icons in headings.
  • Real text only. No image-based headings, logos, or skill bars.
  • Standard fonts. Arial, Calibri, Helvetica, or Times New Roman at 10-12pt.
  • Plain bullets and consistent dates. Use one date format throughout, such as Jan 2024 – Present.
  • Reverse-chronological order. Most recruiters and parsers expect it.
  • Contact info in the body. ATS parsers often strip headers and footers.
  • Export from your word processor. Save a PDF from your editor, and keep the .docx in case a portal requires it.
  • Mirror the job's wording. If a posting says e-discovery or docs-as-code, use that exact term so matching catches it.
tip

Keep one clean resume for most applications. Sweepy can send a different file per track, because tracks[].route_keywords picks the resume to attach. That setting never changes the match score.

Keywords come from must_have_skills​

Sweepy scores each posting against two overlap measures:

OverlapWeightWhat it measures
Requirement overlap60%How much of the posting's requirements your resume already shows
Keyword overlap40%How much of your resume's vocabulary the posting repeats

The posting defines what the match means, so requirement overlap carries 60% of the score. Required qualifications count twice the weight of unlabeled terms. Preferred qualifications count half.

Your term list combines must_have_skills with a short built-in list of common tech and legal terms. Alex's profile lists the same skills:

profiles/paralegal_nyc.yaml
resume:
path: "Alex_Rivera_Resume.pdf"
must_have_skills:
- "Westlaw"
- "LexisNexis"
- "e-discovery"
- "Contract Review"
- "Legal Research"

The built-in list covers few terms, so Sweepy also reads your resume directly. It ranks terms in four tiers, strongest first:

  1. Your Skills section.
  2. The built-in list.
  3. Your most frequent non-stopword terms.
  4. Capitalized phrases that a stronger tier already contains.

The strongest 60 terms survive, in that order. Posting terms follow the same discipline, capped at 25, and come from the posting's requirements or qualifications block when it labels one.

tip

Treat must_have_skills as your real term list. Add these:

  • Every skill, tool, and platform you name in your resume, such as Westlaw, Relativity, or case management.
  • Terms your industry uses, even when your resume words them differently, such as e-discovery or litigation support.
  • Exact phrases from postings you want. Sweepy matches whole words, so copy the posting's wording when it matters.
caution

Each term counts in the keyword overlap denominator. A long list still lowers the score for roles that miss most of it, so keep the list to terms you actually have.

Adding industry-specific terms​

Matching ignores case and handles plural forms. Sweepy adds a built-in alias list for common tech acronyms, including:

  • API / application programming interface
  • UX / user experience
  • WCAG / web content accessibility guidelines

Add resume.synonyms to cover the rest of your field's vocabulary:

profiles/paralegal_nyc.yaml
resume:
synonyms:
- ["e-discovery", "ediscovery", "electronic discovery"]
- ["legal research", "case law research"]
- ["docketing", "case calendaring"]
- ["legal assistant", "legal secretary"]
- ["contract review", "contract analysis", "agreement review"]

Sweepy treats every term in a group as interchangeable. A posting that writes electronic discovery matches a resume that writes e-discovery, and vice versa.

  • A group needs at least two terms. Sweepy ignores a group with one term.
  • Matching still requires the whole phrase. List legal research and legal researcher as separate terms when you want both to count.

The configuration reference documents this setting field by field.

How rankings work​

The match percentage measures shared vocabulary. A role that fits through context can still score low. High overlap flags a posting for a closer look. You decide whether to apply.

Connecting Sweepy to AI

Sweepy compares terms, and it never guesses at intent. Connect a large language model (LLM) through the Model Context Protocol (MCP) when you want Sweepy to use context and advanced reasoning in its results.