How to sort a leads csv by lead score, highest first
- Step 1Export the leads list from your CRM — HubSpot: Contacts → Export → include
HubSpot Score(or your custom score). Salesforce: report or list view → Export → CSV with the score field. Marketo / Pardot: Leads → Export including the score/grade column. All export comma-delimited CSV (auto-detected). - Step 2Drop the file onto the sorter above — The first row is read as the header and pinned to the top. The Sort by column dropdown lists your column names, so you can pick
HubSpot Score,Lead Score, orGradedirectly rather than counting columns. - Step 3Select the score column — Choose your score field in the dropdown. If you track several (
HubSpot Score,Likelihood to close,Predictive Score), pick the exact one you want to prioritise by — the sort uses one column per pass. - Step 4Tick Numeric sort if the score is a number — For numeric scores (
0–100, or any integer/decimal), enable Numeric sort (treat values as numbers) so100sorts above85. Leave it off only for letter grades (A,B,C) — those are text and sort alphabetically, which happens to putAfirst. - Step 5Choose descending for highest-first — Select Z → A (descending) so the largest score sorts to the top. (For letter grades, descending puts
Don top, so use A → Z (ascending) to putAfirst — letter grades invert the intuition.) - Step 6Sort, verify the top lead, and download — Click Sort rows. The result panel confirms
Sorted by <score column> · descendingand the row count. Check that the top row is your highest score, then Download Sorted CSV — saved as<name>.sorted-desc.csv, ready to hand to the SDR team.
Score formats and the right sort settings
Match your score column's format to the mode and direction that put the best lead on top.
| Score format | Mode | Direction for best-first | Notes |
|---|---|---|---|
Integer 0–100 (85, 100) | Numeric (checkbox on) | Descending | The common case — 100 sorts above 85 correctly |
Decimal (92.5, 88.0) | Numeric | Descending | Decimal point kept by the numeric strip |
Percentage (85%, 100%) | Numeric | Descending | % stripped → compares 85 vs 100. Works |
Letter grade (A, B, C, D) | Alphabetic (numeric off) | Ascending (A first) | Descending would put D on top — invert direction |
Tier label (Hot, Warm, Cold) | Alphabetic | n/a — alphabetical, not by heat | Sorts Cold, Hot, Warm — not meaningful. Map to numbers first |
Negative scores (-10 penalty) | Numeric | Descending | Minus sign kept; penalties sort to the bottom |
What the sorter can and can't do for lead lists
The sorter reorders rows by one column. Routing, filtering, and dedup are separate tools.
| Need | In the sorter? | Use instead |
|---|---|---|
| Order leads best-score first | Yes — core function | — |
| Sort by score, then by company | No (one column/pass) | Sort company first, then score (stable sort keeps it) |
| Keep only leads above score 70 | No | csv-column-filter (Pro) |
| Remove duplicate lead rows | No | csv-deduplicator |
Convert Hot/Warm/Cold to 3/2/1 | No (never edits cells) | csv-find-replace, then sort numeric |
| Split top-N leads into a file per rep | No | Sort, then csv-row-splitter |
Cookbook
Real before/after snippets from CRM lead exports. Names and emails anonymised; the sort behaviour is exactly what the tool does.
Integer lead scores, highest first
ExampleA HubSpot export ordered by record ID. Numeric descending puts the perfect-score lead on top. Note that without numeric mode, 100 would sort below 85.
Input (ordered by record ID): Email,Company,HubSpot Score a@x.com,Acme,85 b@x.com,Globex,100 c@x.com,Initech,72 Sort by: HubSpot Score · Z -> A (descending) · numeric ON Output (best lead first): Email,Company,HubSpot Score b@x.com,Globex,100 a@x.com,Acme,85 c@x.com,Initech,72
The text-sort trap: 100 buried below 85
ExampleSame scores sorted descending with Numeric OFF. As text, '85' sorts above '100' because '8' > '1' at the first character — your hottest lead drops down the list. Always tick Numeric for numeric scores.
Input: Email,Score a@x.com,85 b@x.com,100 c@x.com,9 Sort by: Score · descending · numeric OFF (WRONG) Output (text order, scrambled): Email,Score c@x.com,9 <- single digit sorts highest as text a@x.com,85 b@x.com,100 <- the perfect score, buried Fix: re-run with Numeric sort ON.
Percentage scores
ExampleSome models export the score as a percentage string. Numeric mode strips the % sign, so 85% and 100% compare as 85 and 100. Descending puts 100% on top.
Input: Lead,Likelihood L-1,85% L-2,100% L-3,92% Sort by: Likelihood · descending · numeric ON Output: Lead,Likelihood L-2,100% L-3,92% L-1,85% (the % string is preserved; only used as 100/92/85 to compare)
Letter grades sort alphabetically — use ascending
ExamplePardot-style letter grades are text. Numeric mode is useless on letters. Alphabetic ascending puts A on top; descending would put D on top, which is the opposite of what you want.
Input: Lead,Grade G-1,B G-2,A G-3,D G-4,C Sort by: Grade · A -> Z (ascending) · numeric OFF Output (best grade first): Lead,Grade G-2,A G-1,B G-4,C G-3,D
Tier labels need mapping before sorting makes sense
ExampleHot/Warm/Cold sort alphabetically to Cold, Hot, Warm — not by temperature. Map the labels to numbers with csv-find-replace first, then numeric-sort descending.
Input: Lead,Tier T-1,Warm T-2,Hot T-3,Cold Direct sort gives Cold, Hot, Warm (alphabetical) - useless. Step 1 - csv-find-replace: Hot->3, Warm->2, Cold->1 Step 2 - csv-sorter: Tier · descending · numeric ON Output: 3 (was Hot), 2 (Warm), 1 (Cold) on top in order.
Errors and edge cases
Real errors and silent failures sourced from each platform's own documentation. Match the wording to the row, fix what the row says to fix.
Numeric checkbox off — `100` sorts below `85`
Invalid orderWith Numeric off, scores compare as text, so 85 sorts above 100 (because 8 > 1) and single-digit scores like 9 sort highest of all. Your best leads get buried mid-list. Always tick Numeric sort for numeric score columns. This is the most common scoring-sort mistake.
Letter grades with descending direction
Invalid orderLetter grades (A–D) are text; alphabetic descending puts D on top, which is the worst grade first. For letter grades, leave Numeric off and use ascending so A lands first. This is the one case where ascending — not descending — gives you best-first.
Tier labels (`Hot`/`Warm`/`Cold`)
Not meaningfulText-sorting Hot, Warm, Cold yields Cold, Hot, Warm — alphabetical, not by intent. The sorter has no concept of label priority. Map labels to numbers (Hot→3, Warm→2, Cold→1) with csv-find-replace, then numeric-sort descending.
Blank or unscored leads
Grouped togetherLeads with no score parse to 0 in numeric mode (blank → NaN → 0). In descending order they cluster at the bottom; in ascending, at the top. The rows are preserved, never dropped. To work only the scored leads, filter out blanks with csv-column-filter first.
Negative scores (penalties)
Sorted correctlyNumeric mode keeps the minus sign, so a penalty score like -10 sorts below 0 — correctly at the bottom of a descending best-first list. No special handling needed; negatives behave as real numbers.
Same-score leads — which comes first?
By designThe sort is stable, so leads tied at the same score keep their input order. If your export was ordered by creation date, same-score leads stay in date order — older lead first. To control the tiebreak (e.g. most-recent-first within a score), sort by date first, then by score.
Score column mixes numbers and text (`85`, `N/A`)
Mixed comparisonIf some cells are numbers and others are N/A or -, numeric mode strips the text rows to empty → 0, so they cluster with unscored leads. The numeric rows still order correctly among themselves. Clean N/A/- to blank (or filter them) before sorting if you want a clean list.
More than 500 rows on the free tier
Rejected (limit)Free sorts up to 500 result rows. A full lead database export is blocked after parsing with a row-count message and a Pro overlay. Pro raises the limit to 100,000 rows. For a quick free pass, filter to your target segment first with csv-column-filter, or split with csv-row-splitter.
File over 2 MB on the free tier
Rejected (limit)Large CRM exports often exceed 2 MB; the free tier blocks before sorting. Pro lifts the file cap to 100 MB. Trim columns you don't need with csv-column-remover to shrink the file, or upgrade for the full export.
Frequently asked questions
How do I put my highest-scoring leads at the top?
Drop the file on the sorter, pick your score column, tick Numeric sort, choose Z → A (descending), and click Sort rows. The lead with the highest score lands on row 2 (under the header). Hand the .sorted-desc.csv to the team and they work top-down.
Why is a score of 100 sorting below 85?
Because Numeric sort is off, so scores compare as text and 8 outranks 1 at the first character. Tick Numeric sort (treat values as numbers) and re-run — it strips everything except digits, . and -, then compares 100 vs 85 as real numbers, putting 100 on top.
Do percentage scores like `85%` work?
Yes, with Numeric on. The % sign is stripped before comparing, so 85% and 100% compare as 85 and 100. The % stays in the displayed cell; it's only ignored for the comparison. Use descending for best-first.
How do I sort by letter grades (A, B, C)?
Leave Numeric off (letters aren't numbers) and use ascending so A sorts first. Descending would put D on top. This is the one scenario where ascending gives you best-first.
Can I sort by score and break ties by company?
The sorter handles one column per pass, but its sort is stable, so do two passes: sort by Company first, then by score descending. Within each score, companies stay alphabetised. Always sort the tiebreaker before the primary key.
Will sorting change my scores or any other field?
No. The sorter only reorders rows — it never edits a cell. Scores, emails, phone numbers, and CRM IDs come out byte-identical, just in a new order. Numeric mode affects only the comparison, not the stored value.
What happens to leads with no score?
In numeric mode, blank scores parse to 0, so unscored leads group together — at the bottom in descending order, the top in ascending. They're never dropped. To exclude them, filter with csv-column-filter before sorting.
How do I turn Hot/Warm/Cold into a real priority order?
Map the labels to numbers first with csv-find-replace (Hot→3, Warm→2, Cold→1), then numeric-sort descending. Text-sorting the labels directly gives Cold, Hot, Warm alphabetically, which isn't a priority order.
Is my lead data uploaded anywhere?
No. All parsing and sorting happen in your browser via PapaParse — lead emails, phone numbers, and account names never reach a server. When signed in, only a usage counter is stored (no content). This is important for CRM data under GDPR/CCPA.
How many leads can I sort for free?
Free handles up to 2 MB and 500 rows per job. Pro raises the limits to 100 MB and 100,000 rows. On free, filter to a target segment first with csv-column-filter or split with csv-row-splitter.
Can I keep only leads above a score threshold while sorting?
No — sorting never removes rows. Filter first with csv-column-filter (Pro) using a greater-than condition on the score, then sort the filtered list. Filtering and sorting are separate single-purpose tools.
How do I split the sorted list into one file per rep?
Sort the list best-first, then use csv-row-splitter to chunk it into equal slices — assign each chunk to a rep so everyone gets a comparable mix of scores, or take the top-N off the top for your best closer.
Privacy first
Processing runs locally in your browser with PapaParse. No file is uploaded — only metadata counters are saved for signed-in dashboard stats.