Python Company Email Finder for Hobbyists (Hunter.io Free Tier)

Day 100 of 100 Days Coding Challenge: Python

Guess what? Today marks my 100th consecutive day of coding. A round of applause, a pat on the back, maybe even a slice of cake—yes, I’ll take all of it. But here’s the twist: I’m not stopping. I’ve started a project (Business Rader 3000) that still has at least 11 days to go, and honestly, I’m too hooked to quit now.

For this milestone day, I tackled something spicy: scraping email contacts for companies. My plan was to use Hunter.io and LinkedIn. Before diving in, I checked Hunter.io and—surprise—they actually hand you 50 free credits a month. For my purposes (coding fun, not spamming every marketing lead in the world), that’s more than enough. I even signed up, grabbed my shiny new API key, and tucked it away like treasure. Little prep steps like that may sound boring, but trust me: they’re the difference between cruising through the code and banging your head against the keyboard later.

Today’s Motivation / Challenge

Why does this matter? Because a business radar that doesn’t give you contact info is like a phone book without phone numbers: decorative, but not terribly useful. Adding email search makes the project feel alive—it bridges the gap between “Hey, I know this company exists” and “Here’s a real human you could reach out to.” For a hobbyist project, it’s part detective work, part magic trick.

Purpose of the Code (Object)

The code connects to the Hunter.io API and asks for email addresses related to the company’s domain. If successful, it returns a tidy list of emails, along with names and job titles when available. Think of it as a very polite assistant who goes knocking on digital doors and brings back a calling card.

AI Prompt

Please add:

Day 4 of Business Rader 3000
Add this function:

  • LinkedIn or Hunter.io Email Search.
  • Use web scraping or Hunter.io API to extract emails.
  • Optionally parse LinkedIn names (only if it’s legally allowed).

Functions & Features

  • Take a company name and resolve it to a domain.
  • Query Hunter.io API for emails connected to that domain.
  • Display results with name, title, and email.
  • Track credit usage so you don’t burn through your free quota.

Requirements / Setup

You’ll need:

  • Python 3.11+
  • Install libraries:

pip install requests

(Plus a Hunter.io API key saved in your .env file.)

Minimal Code Sample

import requests, os

api_key = os.getenv(“HUNTER_API_KEY”)

domain = “ford.com”

url = f”https://api.hunter.io/v2/domain-search?domain={domain}&api_key={api_key}”

resp = requests.get(url).json()

print(resp.get(“data”, {}).get(“emails”, [])[:3])  # show first 3 emails

This snippet grabs a few emails from Hunter.io for Ford—costs you one credit, but gives you real contact info.

business-rader-3000

Notes / Lessons Learned

The process was smoother than I expected, but I did trip over a silly variable mismatch. My function call used industry_hint=…, while the helper file similar.py didn’t know what that was. Cue cryptic errors. Once I tied the function signatures together, everything clicked.

Testing with Ford Motor Company gave me several emails right away, and I checked—just one credit gone. Not bad! For hobby use, the free tier is plenty. But if you’re planning to do serious lead generation, you’ll probably want to pony up for a paid plan. For me, though, the thrill was enough: after 100 days of code, I can officially say my project can find people on the internet. That feels oddly powerful.

Optional Ideas for Expansion

  • Add a filter to only return emails with certain job titles (CEO, Marketing Manager, etc.).
  • Save results into a CSV for later use.
  • Combine Hunter.io with another source (like Wikidata titles) for richer context.

Conclusion

This wasn’t exactly Day 100—it was Day 108. That’s when the Business Radar 3000 project was finally completed.

We live in a surprisingly good era. Not long ago, the barrier to entry for programming felt much higher to me. I was always interested, but it was never a priority. At the time, I told myself it was because I was busy earning degrees and professional designations, or because work had me constantly traveling. Eventually, I had to admit the truth: those were excuses.

I’ve never been fond of “book-only” learning. I’m far more output-oriented. What matters to me isn’t the process itself, but what I can actually build from it. There was no guarantee I would enjoy programming—or that I would produce anything useful at all. But curiosity was enough to start.

To create something truly sophisticated, you still need solid programming skills. That hasn’t changed. But even with modest skills—like mine—you can already build meaningful tools. And that alone changes the equation.

That said, programming comes with responsibilities. A few lessons worth remembering:

  • Protect your information. Never hard-code sensitive data when accessing services through Python.
  • Use a .gitignore file. If you’re pushing code to GitHub, protecting your credentials is non-negotiable.
  • Back up everything. I once broke a project I’d been working on for over two weeks and spent hours repairing the damage. Once is enough to learn that lesson.

AI has the potential to close certain knowledge gaps. Someone with limited programming experience can now create simple but useful tools—like a stock tracker, a book tracker, a civilization timeline app, or a business analysis app.

I was curious about how far AI could push me, especially amid constant headlines about programmers losing their jobs and predictions that AI will replace most forms of work. Some displacement may be inevitable. But it’s worth remembering that there are still things AI cannot do.

There are warnings that AI will leave us intellectually hollow, disengaged from real thinking. I don’t believe that. Engagement is still a choice. What we build—and what we choose to care about—remains entirely human.

Birds of a Feather Code Together: Python Find Similar Companies

Day 99 of 100 Days Coding Challenge: Python

Today’s quest: teach Business Rader 3000 how to find “similar companies.” Easy to say, trickier to do. Originally, the plan involved OpenCorporates, Clearbit, and Crunchbase. Yesterday, however, reality crashed the party. OpenCorporates? Pricey. Clearbit? No more free accounts. Crunchbase? Definitely not in the “hobbyist budget.”

At first, I felt like someone standing outside a candy store with empty pockets. But then I realized—who needs the fancy candy shop when you can make your own fudge at home? That’s the fun of coding: it may take more effort (and a little mess), but you can build something that works without spending a fortune. My new strategy? A patchwork of cheaper (or free) sources and a bit of scraping magic. After all, constraints often make the project more interesting.

Today’s Motivation / Challenge

Why does this matter? Because companies don’t exist in isolation. If you know who the competitors are, you suddenly see patterns—like spotting rival coffee shops at every street corner. Finding “lookalike” businesses is the first step toward building a tool that doesn’t just tell you about one company but about the whole ecosystem it lives in.

Purpose of the Code (Object)

The code takes a company name and then searches different sources (Owler, Yahoo, Wikidata) to find competitors or similar businesses. If one source doesn’t answer, another fills the gap. The result is a short list of peers, each with a name and website—kind of like giving you a curated guest list for the company’s business reunion.

AI Prompt

Day 3 of Business Rader 3000
Find similar companies.

  • Do not use OpenCorporates (too expensive), Clearbit (no more free accounts), or Crunchbase (too expensive).
  • Use Owler for occasional free searches.
  • Use Yahoo Finance for ticker and industry peers.
  • Use Wikidata SPARQL for international coverage.
    Return a list of similar companies + websites.

Functions & Features

  • Prompt user for a company name.
  • Query Owler to get competitors (via scraping or API).
  • Use Yahoo Finance for peer info based on industry/sector.
  • Run a Wikidata SPARQL query to fetch related companies with official websites.
  • Provide a clean list of names + URLs.
  • Normalize company names to avoid simple typos breaking everything.

Requirements / Setup

You’ll need:

  • Python 3.11+
  • Install libraries:

pip install requests yfinance

(Optional: SPARQLWrapper for Wikidata queries.)

Minimal Code Sample

import yfinance as yf

company = “F”  # Ford ticker

info = yf.Ticker(company).info

print(f”Industry: {info.get(‘industry’)}”)

print(“Similar companies: (placeholder for Owler/Wikidata results)”)

This pulls Ford’s industry, then you’d add competitor lookups from Owler or Wikidata.

business-rader-3000

Notes / Lessons Learned

I discovered Owler, which kindly offers free searches if you don’t bombard it. Perfect for this project. Yahoo didn’t have a dedicated “competitors” endpoint, but industry info is enough to infer peers. Wikidata, meanwhile, is like that overachieving student—quirky, international, and full of surprising coverage.

Of course, things went sideways when I mistyped “Ford” as “Forrd.” The script gave me nothing but errors. That’s when I remembered the Japanese concept of poka-yoke: mistake-proofing. I built in a normalization step so my typos wouldn’t torpedo the whole run. I also added a fallback list by industry, so even if the APIs go on strike, I still get something useful back. Debugging felt less like a chore and more like teaching the code to politely say, “Did you mean Ford, not Forrd?”

Optional Ideas for Expansion

  • Add a fuzzy search so the program auto-corrects near-miss spellings.
  • Save competitor lists to a CSV for easy reuse.
  • Visualize the competitor network with a simple graph.

When APIs Ghost You: Building a Python Company Industry API Fallback

Day 98 of 100 Days Coding Challenge

Today’s mission: teach Business Rader 3000 how to fetch industry information for a company. Sounds simple, right? Type “Ford Motor Corporation,” press enter, and voilà—get back “automotive industry.” Except, of course, nothing in programming is ever that straightforward.

My first plan was to use Clearbit. Plot twist: Clearbit slammed the door on free accounts. Then I looked at OpenCorporates—yep, that one comes with a price tag too. Fair enough; servers don’t run on fairy dust. But since I’m a hobbyist coder, dropping money on every shiny API is not my jam.

So I went with the Big Three:

  • Yahoo Finance (yfinance) for public companies.
  • Wikidata API for international and quirky cases.
  • Google Knowledge Graph is the “last resort uncle” who knows a little about everything.

Google KG is tricky—you get some queries free, but if you forget to actually activate your account (like I did), you’ll spend hours wondering why nothing works. I had déjà vu from a year ago when I took a Coursera class on Google Cloud and burned through my free credits, then was charged $6.5. It’s possible I may have just expired a trial. To be fair, Google Cloud gave you a way to maintain your costs if you are serious about using their service. That is how I know I spent money. The bright side? Google still gives a generous allowance of daily free queries. It’s like IT giants saying, “Sure, kid, go play in our sandbox—just don’t dig a swimming pool.”

Today’s Motivation / Challenge

Why does this matter? Because knowing what industry a company belongs to is like knowing the genre of a book before you read it. You don’t want to bring a box of tissues to a slapstick comedy, and you don’t want to pitch software to a tire manufacturer. Business Rader 3000 needs this context to do anything useful, and today was the day it learned how to ask smart questions.

Purpose of the Code (Object)

The code takes the company name you provide and then checks three different sources (Yahoo Finance, Wikidata, Google KG) to guess its industry and sector. If one fails, the next one steps up. Think of it as having three friends with wildly different interests—if one doesn’t know the answer, another probably does.

AI Prompt

For your Business Rader 3000 project, I’d suggest:

  • Use Yahoo Finance / yfinance for public companies.
  • Use Wikidata API for broader coverage (private + international).
  • Fall back to the Google Knowledge Graph API for missing entries.

Please add exactly the same functions, but change the source of information.

Functions & Features

  • Prompt the user for a company name.
  • Query Yahoo Finance for industry and sector info.
  • Query the Wikidata API as a second source.
  • Use Google Knowledge Graph as a fallback.
  • Display results in a simple dictionary format.

Requirements / Setup

You’ll need:

  • Python 3.11+
  • Install libraries:

pip install yfinance requests

(Plus a Google API key if you’re using Google KG.)

Minimal Code Sample

import yfinance as yf

company = “F”

info = yf.Ticker(company).info

print({“industry”: info.get(“industry”), “sector”: info.get(“sector”)})

Here we ask Yahoo Finance about Ford, and it politely answers with industry and sector details.

business-rader-3000

Notes / Lessons Learned

When I first ran the program, the response was… silence. No data, no errors, just tumbleweeds. Debugging to the rescue. I added two levels:

  • BR_DEBUG=1 to show which provider answered (or didn’t).
  • BR_DEBUG=2 to print detailed HTTP errors.

That’s when I remembered my weather app fiasco: API keys sometimes need 45–50 minutes to wake up after being created. Turns out, I hadn’t properly activated Google KG at all. Once I fixed that, it worked like a charm. The funny part? By the time I figured this out, I couldn’t tell whether it was my script improving or the API finally letting me in. Either way, I learned something priceless—how to debug like a grown-up.

Optional Ideas for Expansion

  • Save industry results into a local file so you don’t keep hitting the APIs for the same company.
  • Add a fallback “guess” list based on keywords in the company name.
  • Display results in a friendly table instead of a plain dictionary.

        info = yf.Ticker(sym).get_info()

        industry = _normalize(info.get(“industry”))

        sector = _normalize(info.get(“sector”))

        if industry or sector:

            return {“industry”: industry, “sector”: sector or _guess_sector_from_industry(industry)}

Building a Python Business Research Tool from Scratch

Day 97 of 100 Days Coding Challenge: Python

Business Radar 3000

The Civilization Timeline project took longer than I wanted. Over the past few days, I had to do a major cleanup because my data suddenly stopped pulling correctly. I spent hours tracking down the cause—chasing bugs like a detective with too much coffee and not enough clues.

That’s when I learned a hard but valuable lesson: always back up your app, no matter how busy you are. If you’re working with environments, GitHub is not optional—it’s survival gear. Unfortunately, this is one of those lessons best learned once… the hard way.

With only four days left in the 100 Days challenge, it’s clear I won’t finish everything neatly by Day 100. Still, instead of panicking, I did what any reasonable person would do: I started a new project.

Our sister company recently introduced an AI-based market analysis app for their business. I wasn’t entirely sure what kind of AI they were using, but it sparked an idea: Maybe I can build something similar myself. The upside? I get to choose exactly which AI to use—and how.

This project also has long-term potential. I can see myself using it as an external analysis tool for my own business in the future, which makes the effort feel far less theoretical.

Knowing this project will likely push me about 7–8 days past the official 100-day mark, I went ahead and launched it anyway.

Thus, Business Radar 3000 was born.

Experience

Today kicked off a brand-new adventure: Business Rader 3000. If that sounds like a sci-fi gadget, well… it kind of is—except instead of spotting UFOs, it’s designed to find businesses. Starting a new project always feels like opening a crisp, blank notebook. You know the one: smooth pages, faint inky smell, the promise that this time, you’ll keep your handwriting neat.

I know this one will run longer than my 100-day countdown—14 days at least. But here’s the twist: I don’t actually care if it spills over. I started this challenge to see if coding would stick. Ninety-seven days in, I already know the answer. Spoiler: it did. I’m not stopping when the counter hits 100.

For setup, I leaned on Poetry again. Last time, I thought I’d forget everything about environments and dependencies, but muscle memory kicked in. Fourteen days may have passed, but the commands still rolled out smoother than I expected. Sure, I peeked at my notes for reassurance, but compared to my earlier flailing, today felt almost professional.

Today’s Motivation / Challenge

Why does this project matter? Imagine a magical Rolodex (remember those?) that not only stores company names but also tells you their industry, who runs them, and what opportunities might be on the horizon. Business Rader 3000 is my attempt at building just that. It’s equal parts detective tool and personal assistant—except this one never complains about coffee breaks.

Purpose of the Code (Object)

The code starts small: it asks for a company name, sets up a safe working environment, and makes sure the right tools are installed. Think of it as laying the foundation for a house—you won’t see fancy wallpaper yet, but without a good base, the whole thing topples.

AI Prompt

Please add the following Tasks.

Day 1 of Business Rader 3000

  1. Prompt the user for a company name.
  2. Set up a virtual environment.
  3. Install necessary libraries.

Functions & Features

  • Ask the user for a company name.
  • Create a clean, isolated Python environment.
  • Install core libraries automatically.

Requirements / Setup

You’ll need:

  • Python 3.11+
  • Poetry (recommended) or pip

If you’re going the pip route:

pip install requests

Minimal Code Sample

# main.py

company = input(“Enter a company name: “)

print(f”Great! We’ll research {company}.”)

One line to ask, one line to confirm. The coding equivalent of saying “hello” before the real conversation starts.

business-radar-3000

Notes / Lessons Learned

Ninety-seven days in, and I’m still tripping over where files should live. Here’s the cheat sheet that finally stuck:

business-rader-3000/ <—- Yes, I have a spelling error, I’ve noticed after I uploaded my app.

├─ .gitignore

├─ .env                 # (later, don’t commit this!)

├─ pyproject.toml       # if using Poetry

├─ requirements.txt     # if using pip

└─ src/

   └─ main.py

Put .gitignore at the root, not buried in some sub-folder. And yes, double-check before pushing to GitHub—nobody wants their API keys doing a world tour. Eventually, this becomes second nature, but while learning, never be shy about asking, “Where does this file go?” It saves hours of detective work later.

Optional Ideas for Expansion

  • Add a greeting that remembers the last company you entered.
  • Store the company name in a text file or database for future sessions.
  • Build a tiny CLI so you don’t have to retype commands every time.