Skip to main content

cyberjobs

Look up open cybersecurity jobs from Python or a terminal, straight from the CyberJobs.cc board.

The board holds about 2,900 open security roles, refreshed every hour from the hiring systems of about 650 employers. Each listing shows the salary its posting states, and its link leads to the employer's own application.

  • Free. No account, no API key.
  • Python 3.9 or newer, standard library only.
  • Ships type information (py.typed).

Install

pip install cyberjobs

Use it from Python

from cyberjobs import search_jobs, KINDS

result = search_jobs(
    "detection engineer",           # words to find in the job title
    kind=["cloud-security", "security-operations"],  # or "cloud-security,security-operations"
    country="US",                   # roles open to people in the United States
    min_salary_usd=150000,          # stated yearly top of at least $150,000
    sort="pay",
    limit=5,
)

print(result["total"], "roles match")
for role in result["roles"]:
    print(role["title"], "|", role["platform"], "|", role["pay"], "|", role["url"])

The signature is search_jobs(q=None, *, kind, platform, country, min_salary_usd, since, sort, limit, offset, src="pypi-package"), and every argument can be left out:

Argument What it does
q Words to find in role titles, for example "penetration tester"
kind A specialty slug, several joined by commas, or a list (see KINDS)
platform An employer slug, for example "mongodb"
country ISO 3166-1 alpha-2 code, such as "US": roles open to people there
min_salary_usd Roles whose stated yearly top is at least this many dollars
since Roles first listed on or after this date, "YYYY-MM-DD"
sort "balanced" (default), "recent" or "pay"
limit Page size, 1 to 50 (the API's default is 20)
offset Roles to skip, for the next page
src A short slug naming your app, carried by every role link. Defaults to "pypi-package"

The reply is a dict:

{
    "total": 42,
    "roles": [
        {
            "id": "...",
            "title": "Senior Cloud Security Engineer",
            "platform": "Altruist",
            "platform_slug": "altruist",
            "kind": "Cloud Security",
            "kind_slug": "cloud-security",
            "pay": "$200,000–$240,000/yr",
            "location": "San Francisco, CA",
            "remote": False,
            "listed": "2026-09-09",
            "first_seen_at": "2026-11-12T22:07:02.767181+00:00",
            "url": "https://cyberjobs.cc/jobs/senior-cloud-security-engineer-3866390c9b8a",
        }
    ],
    "more": "https://cyberjobs.cc/",
}

pay carries the salary range from the posting. When a posting states none, it is a sentence that begins "No salary".

If you build a tool on this package, pass your own src so the board can tell which tool a visit arrived from.

KINDS holds the ten specialty slugs and KIND_LABELS their names:

Slug Specialty
security-engineering Security Engineering
security-operations Security Operations & Incident Response
cloud-security Cloud Security
application-security Application & Product Security
identity-access Identity & Access Management
offensive-security Penetration Testing & Red Team
threat-intelligence Threat Intelligence & Security Research
governance-risk-compliance Governance, Risk & Compliance (GRC)
security-architecture Security Architecture & Consulting
security-leadership Security Leadership

Problems surface as CyberJobsError, which has a status attribute set when the server replied (for instance an unknown kind gives 400) and None when it could not be reached. Brief network errors such as a timeout are retried twice first. A limit, offset or min_salary_usd outside its range raises ValueError before any request goes out.

The endpoint is GET https://cyberjobs.cc/api/v1/jobs.

Terminal

cyberjobs search [keywords] [--kind cloud-security] [--country US] [--min-salary 150000] [--sort pay] [--limit 20] [--json]
cyberjobs kinds
python -m cyberjobs search "detection engineer"

Further options: --platform <slug>, --since YYYY-MM-DD, --offset <n>, --version, --help. Salaries are yearly dollars.

# Cloud security roles open in the US with a stated top of $150,000 or more, best paid first
cyberjobs search --kind cloud-security --country US --min-salary 150000 --sort pay --limit 10

# Two specialties at once, printed as JSON for scripts
cyberjobs search --kind application-security,offensive-security --limit 25 --json

The table looks like this:

TITLE                                        PAY                   EMPLOYER  LINK
-------------------------------------------  --------------------  --------  ------------------------------------------------------------------------------
Security Engineer III                        $205,920–$343,200/yr  Veeam     https://cyberjobs.cc/jobs/security-engineer-iii-1a116caaf2f9?src=pypi-package
Security Engineer, Cloud                     $270,000–$330,000/yr  Rogo      https://cyberjobs.cc/jobs/security-engineer-cloud-707a611d3a14?src=pypi-package
Senior Security Engineer, Platform Security  $217,800–$326,800/yr  Block     https://cyberjobs.cc/jobs/senior-security-engineer-platform-security-d422a6fb5444?src=pypi-package

Roles 1 to 3 of 40 open. Browse the board: https://cyberjobs.cc/?src=pypi-package

Every link opens the role's page on CyberJobs.cc, which sends you on to the employer's own application.

For AI assistants (MCP)

An MCP server for the same data is hosted at no cost and needs no key. Its tools are search_cybersecurity_jobs, get_cybersecurity_salaries, get_cybersecurity_job_market and get_cybersecurity_employer:

https://cyberjobs.cc/api/mcp

In Claude Code, add it with claude mcp add --transport http cyberjobs https://cyberjobs.cc/api/mcp. A client that can only start local programs can use the npm package with the same name: {"command": "npx", "args": ["-y", "cyberjobs", "mcp"]}.

Privacy

  • Nothing to sign up for. No key, no account.
  • What leaves your machine. Your filters travel as query parameters to https://cyberjobs.cc/api/v1/jobs, together with a src tag (pypi-package unless you set another) and a User-Agent shaped like cyberjobs-pypi/<version>. As with any web request, the server also sees your IP address.
  • What does not. There is no telemetry, no file is read or written, and the only host contacted is cyberjobs.cc.
  • Read-only. The package fetches public job data and never applies, posts or changes anything for you.
  • Who is behind it. CyberJobs.cc is a job board. Job seekers pay nothing; the board earns a referral fee on some of its links.

License

MIT. Copyright (c) 2026 O-mega Enterprise, Inc.

Metadata

Release files for cyberjobs 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cyberjobs 1.0.0
File Size Uploaded Provenance Actions
cyberjobs-1.0.0.tar.gz 11.4 kB Without provenance Details for cyberjobs-1.0.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for cyberjobs 1.0.0
File Interpreter ABI Platform Actions
cyberjobs-1.0.0-py3-none-any.whl Python 3 none any Details for cyberjobs-1.0.0-py3-none-any.whl

Total release size: 22.9 kB

Release files / cyberjobs-1.0.0.tar.gz

Download URL cyberjobs-1.0.0.tar.gz
Size 11.4 kB
Tags Source
SHA-256 checksum
How to use checksums
b02bd80b5041cd75c13a8ab0d416c335021ac623fca775974326542de7609e78
BLAKE2b-256 checksum
How to use checksums
424ec747d683cfc740fcf75383ee48d3c9aebc4c4a0c9817035a55ca8bc40717
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / cyberjobs-1.0.0-py3-none-any.whl

Download URL cyberjobs-1.0.0-py3-none-any.whl
Size 11.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8ee6b32659891c8877e14e898b665f312aed46cfeb61e5eaba35074035b4358b
BLAKE2b-256 checksum
How to use checksums
0967e16aa4acf84051ab70524848d8a522bb9a5f5a0eabfc03172190ebd9e917
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Security for cyberjobs 1.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page