webzap/jobs source code
$ webzap-jobs --describe-your-dream-job

Tell us the job you actually want.

Every day, WebZap Jobs scans thousands of open positions and emails you only the ones that match what you wrote. No profile to fill in, no account, no CV upload. Just your own words.

↳ free & open source – read exactly what we do with your data · github.com/Kipperlenny/webzap-jobs

This is 100% free. Your text is used for exactly one thing: emailing you tailored job offers.

We never sell or share your data – it's a one-way street. To keep this free, companies can pay us to include their job in our emails, and some job links go to partner job search engines that pay us per click. Both are always clearly labelled (“Sponsored”, “Partner link”), and neither ever gets your email address or what you wrote. Every email has a link to change the frequency, pause, or delete everything – one click, any time.

✓ free forever✓ no account✓ no cookies✓ encrypted at rest✓ open source
~/webzap-jobs — new search

Mention your field, your interests, your last position, where you're based, remote or not, salary expectations, what you don't want – everything in your head. Brainstorm it!

!Don't enter your name or other personal details (phone, address, employer names you want to keep private, health, etc.). We only need what describes your job search intent.

Only used to send you job matches and the links to manage your entry.

how it works

  1. describeWrite freely what you're looking for. Messy is fine.
  2. confirmClick the link in the email we send you. Unconfirmed entries vanish after 48 h.
  3. receiveGet matching open positions, daily or weekly. Only real, current postings.
  4. controlNo account, no password. Every email contains your personal links to edit, pause, export or delete.

don't trust us – read the code

WebZap Jobs is open source. Everything this site does with your data is public on GitHub.

Privacy promises are cheap. Code is verifiable. Read it, audit it, run your own instance, or open an issue if you find something you don't like.

  • MIT license
  • email + text encrypted (Fernet/AES)
  • links stored only as SHA-256 hashes
  • zero cookies, zero trackers
  • no third-party fonts or scripts
  • deployed commit shown in the footer
def add_pending(email: str, text: str, frequency: str) -> dict:
    """Store an unconfirmed signup; returns its fresh tokens {confirm, manage, delete}."""
    t = {k: secrets.token_urlsafe(32) for k in ("confirm", "manage", "delete")}
    with _conn() as c:
        c.execute(
            """INSERT INTO signups (email_hash, email_enc, text_enc, confirm_hash, manage_hash, manage_token_enc,
                     delete_hash, frequency, created_at) VALUES (?,?,?,?,?,?,?,?,?)""",
            (
                email_hash(email),
                _fernet.encrypt(email.strip().encode()),
                _fernet.encrypt(text.encode()),
                _h(t["confirm"]),
                _h(t["manage"]),
                _fernet.encrypt(t["manage"].encode()),
                _h(t["delete"]),
                frequency,
                int(time.time()),
            ),
        )
    return t
↑ the actual function that stores your sign-up, read from the code running right nowweb/store.py:128