Recruiter Autoreply Bot 2

Let me state the obvious: recruiters aren’t actually sending most recruiter emails. They automate it with software. However, the recipients of recruiter emails must spend real human time either responding to or ignoring these emails. Unfortunately just ignoring the emails triggers more followup emails (they usually come in sets of 3). This adds up to a lot of wasted time.


Back in 2019 I created a bot that automatically responded to recruiters I tag with a certain label in Gmail. The way the bot works is:

  1. Wake up every 6 hours
  2. Scan for any new emails with label:Recruiter tag
  3. Send automated response (if I haven’t already replied to the thread)
An example automatic reply.

For the past 2 years, this approach has worked well. It only requires manual input once to add the Recruiters label. It’s superior to just archiving or ignoring the email because it stops the chain of followups the recruiter software is programmed to do.

How could this be improved?

I still need to spend time manually tagging recruiter emails with the right label. On-and-off I’ve been experimenting with machine learning for this problem. This is a pretty cut-and-dry binary text classification problem, one that you can find many off-the-shelf ML examples for.

However, being a single person and not a company with unlimited resources, it was difficult to train, package, and deploy an accurate model cheaply enough.

Only recently did it dawn upon me that there is a smarter way — without any machine learning.

Using recruiter software against itself

I noticed that most recruiter emails will either wrap their outbound links with a tracking proxy, for example:

<a href="">

or include an invisible tracking pixel, here’s an example:

<img src="" />

So, we can use the recruiting software’s tracking functionality against itself to detect emails with tracking links and automatically reply.

Out of the 113 recruiter emails I’ve received in 2021 YTD, the new bot matches 69 of them (54% recall) with zero false positives (100% precision).

These results are with just 8 string matchers. With more data mining I think I could improve the recall significantly.

This is a perfect lesson to carefully think if machine learning is really necessary to solve a problem. In this case, instead of having to manage the training and deployment of a big ML language model, simple string matching provided a superior result with no ML.

If you’re interested in trying this bot out yourself or applying it to different applications, let me know and I’ll share the source code with you.

Contents (top)