Redmine Extractor avatar

Redmine Extractor

Pricing

from $0.35 / 1,000 records

Go to Apify Store
Redmine Extractor

Redmine Extractor

Point at any Redmine instance (Ruby core, self-hosted project trackers) and get one structured row per issue: subject, project, tracker, status, priority, author, timestamps. Also lists projects and can attach issue journals.

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

a day ago

Last modified

Categories

Share

A GENERIC "point at any Redmine instance" Apify actor — the issue-tracker sibling of the Bugzilla/Gitea/Gerrit generic extractors. Redmine is the Rails project-management / issue tracker behind Ruby-core (bugs.ruby-lang.org), many distros, and thousands of self-hosted installs, and every install ships the same native JSON REST API with anonymous read on public projects — so ONE actor spans every Redmine install in existence, no per-tracker scraper.

Input

FieldModeMeaning
sources (required)allOne or more Redmine base URLs — https://www.redmine.org, https://bugs.ruby-lang.org, or any self-hosted install. /issues.json / /projects.json is appended for you.
modeissues (default) or projects.
projectIdissuesRestrict to a project by numeric id or identifier (e.g. redmine, ruby-master).
statusIdissues* for all statuses, open, closed, or a numeric id. Redmine returns only open issues by default.
trackerIdissuesRestrict to a numeric tracker id (per-server, e.g. 1 = Defect).
includeJournalsissuesOpt-in per-issue fetch that attaches journal (comment) count + the last comment note. Makes one extra request per issue — pair with a small maxRecords.
maxRecordsallGlobal cap across every source (one row = one billable event).
apiKeyallOptional Redmine API key for a private instance (X-Redmine-API-Key). Never logged.
extraHeadersallOptional extra request headers (JSON).

No filter is required in issues mode — an unfiltered Redmine issue query is valid and returns the open issues across all public projects. Run projects mode first to discover valid project identifiers.

Modes

  • issues (default) — paginated /issues.json → one flat row per issue: id, subject, description, project_id/project_name, tracker_name, status_name, status_is_closed, priority_name, category_name, author_name/author_id, assigned_to_name/assigned_to_id, done_ratio, is_private, created_on, updated_on, closed_on, plus a lossless _raw. With includeJournals, also journal_count, last_note, last_note_on, last_note_by.
  • projects/projects.json → one row per public project (id, name, identifier, description, status, is_public, created_on, updated_on).

Behaviour

  • Every field is read by key presence (dict.get) — Redmine servers differ in which optional fields they populate (e.g. www.redmine.org issue status omits is_closed while bugs.ruby-lang.org includes it), so an absent field yields null for that column, never a crash. Unknown fields survive in _raw.
  • Timestamps (created_on / updated_on / closed_on) are normalized to ISO-8601 Z; a value that is already a bare date is kept as YYYY-MM-DD.
  • A source behind an anti-bot interstitial (a non-JSON HTTP 200), a 403 / 404, or a JSON body without the expected issues / projects array (the REST API disabled) is a clean skip-with-warning — the runner continues with the other sources. The run only fails fast (exit 91) when every source was skipped, so nothing broken ships and the cloud smoke gate stays honest.
  • A valid instance with 0 matching issues → 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)