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, 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

1

Total users

0

Monthly active users

11 hours 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://bugs.documentfoundation.org, https://bugzilla.redhat.com, https://bugzilla.mozilla.org, https://bugs.gentoo.org, or any self-hosted install. /rest/... is appended for you.
mode—products (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 LibreOffice 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.

Your run's maximum cost is respected. The Actor checks the budget before its first Bugzilla request and before every page, asks each page only for the rows you can still pay for, and keeps what was already delivered. You are only charged for records that land in your dataset. If a page fails after some records were delivered, those records stay but the run is marked failed.

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)