Loading your account…
Tracker help

How Strava matching works

How Strava matching works

Somewhere in your Strava history are brevets called “Morning Ride”, brevets split across a sleep stop, and rides to the start that look like brevets. This is how the tracker tells them apart: the title rules, the scoring, the map check, and the evidence that it works.

At a glance

counts as a close call
3 pts
map corridor
750 m
map time budget
1 s
Reads
Title, local date, distance and the route line
Compares with
Irish and World calendar events, permanents and rides already in your tracker
Sorts into
Ready rides, Questions and Other activities
Changes
Nothing, until you press Import

Why a brevet is hard to find

A person looking back through a season recognises a brevet from a word or two and a date. Software has to be told how, and every shortcut it takes has a cost somewhere else. Match loosely and a spin past Sally Gap becomes the Two Gaps permanent. Match strictly and “Morning Ride” is never found at all.

Five real titles
  • Morning RideStrava’s default titleNot a word of the route’s name.Found by the map
  • Queen Of Connemara #4 RRTY . 4BH201.5 kmThe catalogue has a Queen of Connemara 100 and a 200.The 200
  • Eoin Mclove 600 Audax day 1383 km, then “Eoin mclove 600 day 2 with a few Garmin gremlins” at 222.8 kmOne brevet, two recordings, either side of a sleep.One 600
  • MCC Spin - Road to Mile Failte 120063.7 kmNames a 1200, but it’s the ride to the start.Left out
  • EaCy100 + detour = 200km203.6 kmA 100 route plus a detour, with the total at the end.Asks about the 100

Riders’ own Strava titles, as they arrived.

Before reading any titles, the tracker fetches your activities from Strava, 200 at a time, one request per year running side by side. Each activity is dated by your own clock where it started, not by UTC. Titles containing a skip phrase, or the name of an indoor app such as Zwift or Rouvy, are dropped before any matching starts.

The exact rules
  • Pages are fetched until Strava returns an empty one. Up to 20 years can be searched at once, and progress streams back as the activities arrive.
  • Each year is fetched with a day’s margin either side in UTC, then filtered by the local start date, so a 00:30 start belongs to the day on your watch.
  • Built-in words that bring a ride into view: audax, rrty, permanent, brm, lrm, fleche, flèche, pbp, sr600, randonneur, randonnée, brest. Your own title hints add to these. They decide what is shown, never what matches.
  • Built-in exclusions: zwift, rouvy, trainingpeaks. A skip phrase always beats a hint, but an activity already in your tracker is always shown.
  • Rides without a hint word are shown from 30 km. A catalogue match under 30 km is left out.
  • The catalogue is loaded once per search. A synthetic benchmark of 500 activities against 440 routes ran about eight times faster after that change, with identical results.

Reading the title

Strava titles are personal: the weather, the company, how the last climb felt. The route name is in there somewhere. The first job is to reduce both your title and each catalogue route name to the same plain words, so they can be compared at all.

The clean-up, in orderBoth sides get the same treatment
  1. Brackets go, with what’s insideKilleshin 400 Audax (part 2)→killeshin 400
  2. Units come off numbers200km→200
  3. Accents foldMíle Fáilte→mile failte
  4. Letters and digits splitEaCy100→eacy 100
  5. Small words and Audax labels dropQueen Of Connemara→queen connemara
  6. Number words become digitsTwo Gaps→2 gap
  7. Plurals shrink to one formMidlands Lakes→midland lake
  8. Years in your title are ignoredMile Failte 2026→mile failte

Examples from riders’ titles and catalogue route names.

Try itType a Strava title
killeshin400audax

2 words left to compare with route names.

A simplified copy of the clean-up, running in your browser. Joined words and typos are handled later, when the words are compared.

The words are then compared as a set, so their order doesn’t matter. Spelling slips are forgiven in longer words, and a name can be joined or split. Each allowance comes with a limit, because each one is also a way to match the wrong route.

Typos and joined wordsForgiving, but not credulous
  • Criu a Chiarde against Criu a Chairde 300Two swapped letters count as one slip.
  • Queen of Conemara against Queen of Connemara 200A missing letter in a long word is forgiven.
  • 24/02/2013 Kings Mountain Audax 200km, Ireland against Kingsmountain 200Two neighbouring words make the joined name.
  • EastCoast200 against East Coast 200It works the other way round too.
  • Kings Road Mountain against Kingsmountain 200The two halves have to sit side by side.
  • Kings Hill Audax 200km against Kingsmountain 200Half of a joined name is not the name.
  • Night Ride against Night Ride Ardattin 200Only “Ardattin” names the route; “night” and “ride” are everyday words.

Real route names. The Kings Mountain title is a rider’s; the others are probes that test the limits.

The exact rules
  • Dropped words: a an to of the and in into from with on at by for, and the labels audax brm lrm sr km.
  • Plurals: -ies becomes -y; -ses -xes -zes -ches -shes lose es; otherwise a final s goes (not ss). Words of three letters or fewer are left alone.
  • Years from 1900 on are dropped from your title only. Numbers never count towards how much of a name was found; they are scored separately.
  • Typos: both words need five letters or more. One edit is allowed, two when the shorter word has eight letters or more, and two swapped neighbours count as one. At most two words per route can be matched this way.
  • Joined names: the joined word needs eight letters or more and each half three. The two title words must be neighbours, in order, not inside brackets, and not everyday words.

Scoring a route name

The tracker scores how much of each route’s name it found in your title. Only the route’s words count, so your own words never lower the score. Twenty-three everyday words such as “morning”, “ride” and “spin” can add to a score, but can never be the only evidence for a route.

Worked examplesThe arithmetic, shown
Strava title
24/02/2013 Kings Mountain Audax 200km, Ireland
Recorded
219.3 km
Candidate
Kingsmountain 200 · permanent
  • kingsmountainin your titleas “Kings Mountain”, side by side
Route words found: 1 of 1100
A one-word name: 1 × 2+2
200 is in your title+5
Score107

Ready ride, tickedThe date, “Ireland” and the year cost nothing: only the route’s words are counted. A one-word name needs its number, and the 200 is there. 219.3 km is within 95–125% of 200.

The exact rules
  • Coverage: an exact word is worth 10 and a typo 7. The total, times 10, is divided by the number of words in the route’s name, so a full match is 100.
  • Specific names get a little more: 2 per word in the name, up to 8. A brevet distance from the name in your title adds 5; any other shared number adds 1.
  • To be a candidate at all, a longer name needs at least two words found, and at least two thirds of them. A one-word name needs its number in your title, an alias, or a word of five letters or more. Without its number, unless it’s PBP or an alias, it can only be a question.
  • Candidates are calendar events on the day you rode (+1), every active permanent, and calendar routes from other dates in the same year, offered as permanents. One-off events such as PBP only match their own year.
  • Calendar candidates include the Irish and World listings. When the activity’s time zone or location identifies its country, events in other countries are left out. England, Scotland, Wales and entries labelled United Kingdom are considered together. Events with no country remain candidates; if the activity’s country is unknown, this check does not narrow the list.
  • Everyday words: ride, cycle, cycling, bike, biking, morning, lunch, afternoon, evening, night, indoor, virtual, trainer, training, workout, session, spin, turbo, commute, commuting, recovery, zwift, rouvy.

Confirm or ask

A close score is not a reason to ask you. When two routes score within 3 points, the tracker weighs the distance evidence first: the distance in your title, then the distance you recorded. “Criu a Chairde Audax” at 299.9 km scores the same against the 200 and the 300, and the recording settles it.

Between close routes, it asks only when a different route has exactly the same evidence. It also asks when a number in your title disagrees with the route’s, or when a one-word route name has no number to back it up. A ride you’ve already logged for that day adds 4 points to its route, one more than the margin, so it breaks the tie.

Recorded distance against the route’sTwo names, two windows
Strong name
Weak name

A strong name has two or more route-specific words; a weak one has one. A DNF word in the title sets these windows aside, because a ride you didn’t finish is meant to be short.

Your words carry signals too. “DNF”, “bailed” or “pulled out” means the finish needs your answer, and a confirmed match is set up as a DNF for you to check. “Almost” gets a gentler question. “Abandoned” counts only when no word follows it, so “Abandoned Churches” is a route, not a retirement. “Ride to the start” and “home from the finish” are travel, and stay out of the way.

The exact rules
  • Finish words: dnf, did not finish, not finished, incomplete, scratched, pulled out, bailed, and abandoned when no word follows it. The gentler one is almost.
  • Travel phrases include a cycling word with “to the start” or “from the finish”, “home from”, “warm up for”, “cool down after”, and “spin - road to”. A route whose name starts “Road to” still matches.
  • A ride already in your tracker is linked only when every word of its name is in your title and it’s on the same day. The date alone never links.
  • With no catalogue match, a title with a trusted word (audax, brm, lrm, brevet, randonneur) and exactly one brevet distance, recorded at 98–105% of it, becomes a new ride ready to import. Not a 600 with 10,000 m of climbing, though: that would quietly become an SR600 needing homologation.
  • Ties are broken the same way every time: events on the day, then permanents, then events from other dates, then the newest route.

Checking the map

For a single recording of 94.5 km or more, the tracker also compares the line Strava drew with the route file of each likely event and permanent. It measures two things: how much of your ride lies along the route, and how much of the route your ride covered. A short piece of the course can score perfectly on the first and fail the second.

Overlap, measured both ways
Route file Your recording
  • Whole route
    ride on route
    98%
    route covered
    97%
    Can find the route
  • Only a piece
    ride on route
    100%
    route covered
    30%
    Not the whole brevet
  • Different ride
    ride on route
    35%
    route covered
    30%
    Asks you

Sketches with illustrative percentages, not real routes.

Both lines are cut down to at most 600 points, then sampled every 500 m or so. A sample counts if it lies within 750 m of the other line. The comparison ignores direction, so a route ridden backwards, or a loop started at a different café, still matches in full.

Two jobsTake a match back, or find one
Can demoteChecking a ticked match

The title found a route and ticked it. If under 40% of each line lies along the other, at a similar length, the match becomes a question: “Does this route match?”

Can promoteFinding a route for “Morning Ride”

The title found nothing. A route within 15% of the distance wins if its overlap scores 90% or more, both directions reach 80%, and it leads the next route by 5 points.

The map is allowed one second per search, and it refuses to guess. If a competing route couldn’t be compared, because its file is missing or out of date, nothing is promoted. If time runs out, the checks already finished still count, and an unfinished search for a route changes nothing. For a possible match, you also see up to five routes ranked by overlap, with both percentages.

shortest ride checked
94.5 km
corridor
750 m
points per line, at most
600
route pairs per search
256
The exact rules
  • Only Strava’s summary line is used. It comes with the activity list, so there are no extra requests, and it is never stored.
  • Distances are measured on a sphere to the nearest point of each segment, not just its corners. Routes are split into a grid of cells about 5.5 km across, so each sample only looks at nearby roads.
  • Route files are fingerprinted when they are downloaded, at up to 2,000 points, and tied to the file’s content. A fingerprint for an older version of the file counts as missing.
  • Finding a route: the score is 70% route covered plus 30% ride on route. Calendar events on the day come first; permanents are tried only if no event qualifies. A permanent that is the same route as that day’s event becomes the event.
  • A ride well over the length of that day’s event, such as one that takes in the ride to the start and home, is checked for the event’s whole route. The stretch from passing the start to passing the finish must be within 15% of the route’s length and score as above. The event is then offered as a question, never ticked.
  • Taking a match back: both directions under 40%, and the recorded line between 80% and 125% of the route’s length. A much longer or shorter ride is left to the distance rules.
  • The check skips a ride that already links to your tracker, a DNF, a partial distance and anything recorded in parts.

One brevet, several recordings

A 600 is often two recordings, and a 1200 four or five. A long part keeps its own match: a part of 100 km or more of a ride of 600 km or more. A shorter part is held back, so nothing claims the brevet until the parts are combined.

Recordings against the ride’s distance
  • “Killeshin 400 audax (part 1)” and “Killeshin 400 Audax (part 2)”399 of 400 km · 99.8%Combined for review as one 400
  • Four recordings called “Celtic knot” over three days918.9 of 1000 km · 91.9%Combined, then asks: “Did you finish?”
  • Two short tries at a 300 permanent, a day apart490 of 300 km · 163.3%Kept as two rides

The tick marks the ride’s distance. Parts are drawn to scale.

Parts belong together when they point to the same route and fall within three days. They are combined when they add up to about the whole distance: 95–125% when only the titles connect them, and from 80% when each part has already been matched to the route, because GPS drops out on long rides. Parts with no “part” or “day” in the title stop at 110%. Well over the distance means the route was ridden twice, and those are never combined.

A strong group arrives already combined as one ride in Ready rides, and you can still choose to keep the parts separate. The combined ride keeps the event’s distance, while the recorded total stays in view. If it falls more than 5% short, you’re asked whether you finished.

The exact rules
  • A part marker is part, pt, day, stage or leg, then a number from 1 to 99 or a word from one to ten, with optional No. or #.
  • Titles match with the marker removed and the words sorted, so “600 Eoin McLlove Part 2” still joins “Eoin McLove 600 Part 1”. A shared start of the title needs two distinctive words; “The ride to day 1” is not enough.
  • A full recording of the same route on the same day stops parts from combining on their own. A full ride within three days leaves shorter ones on that route in Other activities, and a second full one becomes a question: did you ride it twice?
  • Grouping uses dates, names and distances only. It doesn’t compare the parts’ maps or start times.

Where it lands

Every activity ends up in one of three lists. Questions don’t block the ready rides, and each has an answer that isn’t a guess: choose another route, add it to a ride you already have, combine it, or leave it out.

The review screenThree lists
  • QuestionsSomething only you know.For example: two routes with the same evidence, a number in the title that disagrees, a short recording, a DNF word, a map that disagrees, a part of a longer ride, a possible repeat.
  • Ready ridesClear matches, ticked for a final look.For example: confident catalogue matches, recordings combined for review, an Audax outside the catalogue with its distance in the title.
  • Other activitiesIn reach, not in the way.For example: already in your tracker, travel to or from an event, a shorter piece beside a full recording, everyday rides.

Nothing is written to your tracker until you press Import. Each ride is then saved on its own, so one failure doesn’t undo the rest. An activity that belongs to a ride you added by hand is attached to that ride instead of making a second one.

How we know it works

Matching was rebuilt in stages, and each stage was driven by real titles. The biggest change, in August, found more brevets and let in some rides that weren’t. Every one riders reported became a regression test alongside its fix, and those tests run on every change.

Seven months of matching
  1. Feb 2026First version: every word of the event’s name had to appear in the title.
  2. MarTypos, number words, aliases, years ignored in titles. The one bug report: a 300 imported as the 200, because the catalogue had the event on the wrong date.
  3. JulRebuilt as small parts that can each be tested alone: clean-up, scoring, deciding.
  4. 9 AugScoring by route-word coverage, so your own words stop counting against you. More brevets were found, and so were some rides that weren’t brevets.
  5. 10–22 AugEach reported false match became a test, then a rule: everyday words, distance windows, travel legs, joined names, DNF words, split rides, the map check.
  6. 6 SepThree weeks of anonymous map results reviewed, and a code review. Three bugs found and fixed that day.
automated tests on matching and import
600+
regression tests for false matches
21
anonymous map checks reviewed
556

The map check keeps anonymous records: the two percentages, the length ratio, and what you chose on import. No rider, activity, route, date, name or coordinates. Unanswered records are deleted after 30 days, answered ones after 18 months, as the privacy policy sets out.

Three weeks of those records were reviewed on 6 September. Of 100 suggestions riders answered, 99 were imported as suggested and one was linked to a ride already in the tracker. The accepted ones had a median of 99.7% of the ride on the route and 100% of the route covered. That is not a 99% accuracy rate: only some suggestions are answered, and nothing checks the answers independently.

The same review showed the thresholds were about right. Of 16 confirmed permanents with under 40% overlap both ways, 13 had been turned into questions; the other three came from the day the check was changed. Raising the cut-off to 90% would have questioned nine rides that riders then accepted. A code review that day found three real bugs: a short page of results ended the fetch early, starts just after midnight took the previous day’s date, and a route with no fingerprint could let another be confirmed. All three were fixed the same day.

A clear question beats a confident guess.

The rule the matcher is built around.

It still gets some wrong, and a wrong suggestion costs you one tap. If you find one, report it on the public issue tracker with the title, the date and what you expected. It will probably become the next test. For the steps of an import, see Importing from Strava.