Use cases

Fill in a list of companies.

Turn a spreadsheet of company names into websites, profile links and contact pages by running one search per row.

How it works
  1. 1
    Start from your list

    Company names, optionally with a city or industry to avoid mix-ups.

  2. 2
    Search for what's missing

    The official site, a careers page, or a profile on a site you name with site:.

  3. 3
    Take the top result

    Store the link, and flag rows where the match looks doubtful for a person to check.

Find each company's website
import csv, os, requests

def top_link(query: str) -> str | None:
    r = requests.get(
        "https://plainserp.com/v1/search",
        params={"q": query, "num": 3},
        headers={"Authorization": f"Bearer {os.environ['PLAINSERP_KEY']}"},
        timeout=30,
    )
    r.raise_for_status()
    hits = r.json()["results"]
    return hits[0]["url"] if hits else None

with open("companies.csv") as f:
    for row in csv.DictReader(f):
        print(row["name"], top_link(f'{row["name"]} official website'))
Why it fits
  • One search per row keeps the cost of a whole list to a few dollars.
  • Asking for only a few results keeps responses small and quick.
  • site: searches target one directory or network at a time.
Know before you start
  • The top result is a good guess, not a verified match. Check the important ones.
  • It returns public pages only. It doesn't find emails or phone numbers for you.
  • Follow the privacy and marketing laws that apply to how you use the contacts.
What it costs

Looking up 5,000 companies once

That is 5,000 searches a run at $0.30 per 1,000. Your first 1,000 are free.

$1.50
a run