Loading live jobs data…

US tech active listings by first-seen date

Solid line accumulates today’s active listings by the date each job was first seen. Shaded area is the 150-day model window. Dashed line is the exponential projection to Dec 31. Switch series to compare US tech with worldwide and non-tech scopes.

How the projection is calculated

Get a fucking job!

Current snapshot

Active job listings

Preparing job listings…

Loaded-scope search and paging

Search, filter, and sort loaded jobs only. Every All or title-group data page loads at most 5,000 jobs, with up to 24 cards shown per result page. Data-page controls replace the current loaded scope with one immutable manifest page.

Loading jobs…

Static JSON, no API required

Data access

Download the same public snapshot that powers this page.

Discover the snapshot

/data/current/manifest.json is the canonical, mutable pointer to the latest generated snapshot. It is short-cached and may change; use its snapshot_date and generated_at fields to judge freshness.

The manifest’s summary_url, every groups[].pages[].url, and every all_pages[].url are immutable snapshot URLs with long-lived cache headers. Each group’s legacy url points to its first page. The summary contains exact totals, title-group discovery, current-active first-seen history, and projection data.

Counts and paging

The manifest’s total_count and summary counts.active_total equal the number of permitted database rows marked active in the published snapshot. Every page entry’s count is the number of jobs in that page; group count values equal the sum of their page counts.

Use the summary or manifest groups for reliable discovery. Cache immutable responses locally, refresh the mutable manifest only when needed, and compare its freshness fields before downloading again. Scrape politely and sequentially—fetch one page at a time rather than opening concurrent requests.

Shell

origin=https://doomersareretardedcommunists.com
curl -fsSL https://doomersareretardedcommunists.com/data/current/manifest.json -o manifest.json

summary_url=$(jq -r '.summary_url' manifest.json)
curl -fsSL "$origin$summary_url" | jq '{counts, title_groups}'

group_url=$(jq -r '.groups[0].url' manifest.json)
curl -fsSL "$origin$group_url" | jq '.jobs[]'

jq -r '.all_pages[].url' manifest.json | while IFS= read -r page_url; do
  curl -fsSL "$origin$page_url" | jq -c '.jobs[]'
  sleep 1
done

Python

python3 - <<'PY'
import json
import time
import urllib.parse
import urllib.request

ORIGIN = "https://doomersareretardedcommunists.com/"

def fetch(path):
    url = urllib.parse.urljoin(ORIGIN, path)
    with urllib.request.urlopen(url) as response:
        return json.load(response)

manifest = fetch("/data/current/manifest.json")
summary = fetch(manifest["summary_url"])
print("Summary:", summary["counts"])

group = manifest["groups"][0]
for page in group["pages"]:
    payload = fetch(page["url"])
    print(f'{group["group"]}: {len(payload["jobs"])} page jobs / {group["count"]} group jobs')

for page in manifest["all_pages"]:
    payload = fetch(page["url"])
    print(f'{page["url"]}: {len(payload["jobs"])} page jobs / {manifest["total_count"]} total jobs')
    for job in payload["jobs"]:
        print(json.dumps(job))
    time.sleep(1)
PY