How GoodDate's matching algorithm works
In our last post we said we’d write more about the algorithm.
This post covers how it works today: what gets scored, how the percentage is calculated, and how we decide who appears in your matches. There’s no machine learning and nothing hidden. It’s just math.
What you give us
Each question has three parts:
- Your answer. The one that’s true for you.
- Answers you’d accept. Every answer you’d be happy for a partner to give. You can check as many as you like, or check “Any.”
- How much it matters. Nice to have, Important, or Dealbreaker.
You can also add a note, or hide your answer. Hidden answers still count toward matching. They just show up as “Ask Me” on your profile.
How a single question is scored
For every question you’ve both answered, we check your answer against their preferences, and their answer against yours. Each check gives points to whoever’s preferences are being checked:
| Importance | Their answer is one you accept | Their answer isn’t one you accept |
|---|---|---|
| Nice to have | +1 | -1 |
| Important | +2 | Big Penalty |
| Dealbreaker | +3 | Never Match |
The penalties are deliberately lopsided. Missing on something important costs much more than what matching on it earns, and missing on a dealbreaker is exactly that: A dealbreaker.
The match score is the sum of both sides: how well they fit what you’re looking for, plus how well you fit what they’re looking for. Because it’s the same sum from either side, your score with someone is always the same as their score with you.
How the percentage is calculated
The percentage is a combination of confidence (that is, how many overlapping questions you’ve both answered) and the net score of the matching. The total score is then capped between 0% and 100%.
The highest possible score is the total importance of every question either of you has answered: 1 for each Nice to have, 2 for each Important, and 3 for each Dealbreaker. That includes questions only one of you has answered, which can’t earn points because there’s no answer on the other side to check. So the percentage doesn’t just reflect how well you agree. It also reflects how many questions you have in common, and it goes up as you both answer more of the same ones.
A worked example
Alex and Sam have each answered two questions.
“Do you want kids?” Alex answers Yes, accepts only Yes, and marks it a Dealbreaker. Sam answers Yes, accepts Yes or Maybe, and marks it Important.
“Are you a morning person or a night owl?” Alex answers Morning person, accepts any answer, and marks it Nice to have. Sam answers Night owl, accepts only Night owl, and marks it Nice to have.
From Alex’s side, Sam wants kids (+3) and Alex is fine with a night owl (+1), so Alex’s side scores 4. From Sam’s side, Alex wants kids (+2) but is a morning person (−1), so Sam’s side scores 1. The match score is 4 + 1 = 5.
The highest they could score is Alex’s 3 + 1 plus Sam’s 2 + 1, which is 7. Their match is 5 ÷ 7 ≈ 71%.
If Sam had answered No on kids instead, Alex’s side would have been deal-broke and the score would have dropped far below zero, and the percentage would show 0%. In practice they wouldn’t see each other at all, which brings us to the matches list.
Who shows up in your matches
You need to answer a minimum of 20 questions before matches appear. Your Matches tab then shows people who:
- have a match score of a minimum threshold set by either side (configurable soon),
- you haven’t already liked or hidden, and
- aren’t suspended or under review by our moderators.
A single missed dealbreaker puts a pair below that line, so neither person shows up in the other’s matches. That’s what we mean when we say dealbreakers really are dealbreakers.
The list is sorted with new likes from people you haven’t seen yet at the top, and then by match score (highest first). You can narrow it down by how recently people were active, by distance, and by whether they have photos. Distance is only a filter, not a score metric.
On a match’s profile, each question shows whether their answer fits your preferences and whether your answer fits theirs, so you can see exactly where the percentage came from.
Once a day we also recalculate each member’s top 20 new matches. That list is what our new-match emails draw from.
What the algorithm doesn’t use
The score comes only from answers and preferences. It doesn’t use photos, attractiveness ratings, how often you log in, how many likes you get, or anything you’ve paid for, since there’s nothing to pay for. Likes only affect the order of your list, as described above.
It will keep changing
The numbers in this post, like the 20-question minimum, are what the code uses today, and we expect to tune them as more people join and we add more questions. When the algorithm changes in a way that affects your matches, we’ll post it on our News page and update this post. If something about your matches doesn’t make sense, yell at us.