redditscanner.ai
back to writing

Why Does the Same Reddit Thread Appear Under Two Keyword Monitors?

How RedditScanner stores overlapping monitor matches, why adding monitor counts overstates unique conversations, and a practical way to deduplicate research.

RedditScanner team
·October 25, 2026·2 min read

A thread can match two keyword monitors and appear in both result lists. RedditScanner stores an opportunity per monitor and Reddit post ID, not one global opportunity per post. Two matches are useful evidence that your search terms overlap; they are not two people asking for help.

I checked the database constraint, scan route, results screen, and trends route in the RedditScanner repository on October 17, 2026. This is an explanation of the code, not a claim about current customer data or live Reddit search coverage. Accounts are closed while the next version is built.

What gets stored when monitors overlap

The opportunities table has a unique constraint on the pair monitor_id, reddit_id. When a scan sees a previously stored post for the *same* monitor, the route updates that pair. A separate monitor ID makes a separate row even if the Reddit post ID matches. The results screen queries by monitor ID, and the dashboard's opportunity count is calculated separately for each monitor.

Imagine a post that appears in searches for both "helpdesk software" and "support inbox." If you had one monitor for each phrase and both scans returned that post above their respective score cutoffs, each monitor could show one opportunity. Adding their displayed counts would give two matches, while the distinct-post count would be one. These phrases are an illustration, not a recorded search result.

There is a second wrinkle: the results screen's "Mark as Engaged" control changes a single opportunity row. Because the rows belong to different monitors, marking one does not mark the other. A later scan also sends is_engaged: false in its upsert payload, so do not treat that flag as a durable record of who your team contacted. Check the actual thread and keep a separate outreach log if that decision matters.

Count matches and conversations separately

For research, keep one line per Reddit post ID, with columns for the post URL, matching monitor names, the question asked, and whether a human has reviewed it. Count monitor matches to learn which searches found it. Count distinct post IDs to estimate how many separate conversations you found. If an export lacks Reddit post IDs, review the URLs before deduplicating: different URL forms can point to the same post.

This distinction matters even more for trend reports. The trends route counts stored opportunity rows across the selected monitors unless you filter by one monitor ID. A thread present in two monitors can therefore contribute twice to a cross-monitor row count. Rescans update found_at on existing rows too; the trend-count walkthrough explains why that chart cannot be read as market demand.

After deduplicating, read each surviving thread in its own context. One post matching two phrases does not create two chances to reply. It creates one conversation to understand, and sometimes the right response is no response at all.

keep reading

Take the next question with you.

Accounts are closed while we build the next version. The field notes stay available in the meantime.