Bugzilla REST Extractor avatar

Bugzilla REST Extractor

Pricing

from $0.35 / 1,000 records

Go to Apify Store
Bugzilla REST Extractor

Bugzilla REST Extractor

Point at any Bugzilla server (Mozilla, Red Hat, LibreOffice, Eclipse, Gentoo) and get one structured row per bug: summary, status, resolution, product, component, priority, severity, reporter, timestamps, keywords. Also lists products and server version.

Pricing

from $0.35 / 1,000 records

Rating

0.0

(0)

Developer

Datamule

Datamule

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

4 days ago

Last modified

Categories

Share

A GENERIC "point at any Bugzilla server" Apify actor — the issue-tracker sibling of the Gitea/Jenkins generic extractors. Bugzilla (Mozilla's tracker, 20+ years old) sits behind Red Hat, LibreOffice, Eclipse, Gentoo, KDE, the Linux kernel, GCC and hundreds of distros/projects, and every install ships the same native REST API with anonymous read on the public bug corpus — so ONE actor spans every Bugzilla install in existence, no per-tracker scraper.

Input

FieldModeMeaning
sources (required)allOne or more Bugzilla base URLs — https://bugzilla.redhat.com, https://bugs.eclipse.org/bugs (the /bugs mount is kept), https://bugs.documentfoundation.org, https://bugzilla.mozilla.org, https://bugs.gentoo.org, or any self-hosted install. /rest/... is appended for you.
modeproducts (safe default), bugs, or version. If API callers omit mode but supply a bug filter, the actor infers bugs.
product / component / statusbugsFilter bugs. Comma lists OR their values.
quicksearchbugsA Bugzilla quicksearch expression.
changedAfterbugsOnly bugs changed at/after a date/datetime or relative token (-7d).
maxRecordsallGlobal cap across every source (one row = one billable event).
apiKeyallOptional Bugzilla API key for restricted products (X-BUGZILLA-API-KEY). Never logged.
extraHeadersallOptional extra request headers (JSON).

The ready-to-run defaults query Eclipse Bugzilla in products mode and return at most 20 rows, so a first click is fast, bounded, and produces useful data.

bugs mode requires at least one filter (product / component / quicksearch / changedAfter). An unbounded /rest/bug is rejected by Bugzilla servers (Mozilla's BMO returns HTTP 400 "You may not search ... without any search terms"), so the runner surfaces a clear input error rather than a blind query. Run products mode first to discover valid product names.

Modes

  • bugs (default) — paginated /rest/bug → one flat row per bug: id, summary, status, resolution, product, component, priority, severity, reporter/assignee (name + numeric id only), creationTime, lastChangeTime, keywords[], version, opSys, isConfirmed, dependsOn[], blocks[], plus a lossless _raw.
  • products/rest/product?type=selectable → one row per product (id, product, classification, description, isActive, milestones[]).
  • version/rest/version → one row per source (reachability + server version probe).

Behaviour

  • Every field is read by key presence (dict.get) — a bug that omits resolution / keywords / a Mozilla cf_* custom yields null for that column, never a crash. Unknown fields (incl. cf_* customs) survive in _raw.
  • Anti-leak: reporter/assignee emails are public-tracker data but are kept out of the flat columns — only the display name + numeric id are flattened. The full *_detail object (email included) is preserved only in _raw.
  • A source behind an anti-bot interstitial (a non-JSON HTTP 200, e.g. Anubis) is a clean skip-with-warning. In multi-source runs a per-source failure is skipped with a warning; a single failing source fails the run so nothing broken ships silently.
  • An empty result → 0 records and a clean exit 0. Unpopular is fine; the actor never fabricates rows.

Pricing

Pay-per-event: one record charge per emitted dataset row.

Development

python3.12 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python tests_logic.py # pure-logic tests (no network)
apify validate-schema
apify run # local run (set .actor storage INPUT.json)