Taiga Project Extractor avatar

Taiga Project Extractor

Pricing

from $0.35 / 1,000 records

Go to Apify Store
Taiga Project Extractor

Taiga Project Extractor

Point at any Taiga instance (open-source agile PM) for one structured row per public project: name, slug, fans, watchers, activity, tags, owner, timestamps. Also fetch a project by slug, per-project agile stats, and fleet counts via the documented REST API.

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

2 days ago

Last modified

Categories

Share

A GENERIC "point at any Taiga instance" Apify actor — the agile-PM sibling of the Redmine / Bugzilla issue-tracker generic extractors. Taiga (kaleidos/taiga) is the open-source agile project-management platform, and every install ships the same native JSON REST API. Its public SaaS host (api.taiga.io) serves ~180k public projects readable anonymously via discover mode — so ONE actor spans every Taiga install that leaves public/discover read open, no per-project scraper.

Input

FieldModeMeaning
baseUrlallA Taiga instance API root. Defaults to https://api.taiga.io (the public host — works with no setup). The /api/v1/... path is appended for you.
baseUrlsallOptional array of instance roots for a multi-instance run. A source that is unreachable / auth-gated / not a Taiga host is skipped with a warning.
modediscover (default), bySlug, stats, or discovery.
slugbySlug / statsThe project slug (e.g. taiga). Required in bySlug; in stats it resolves the project id via by_slug.
projectIdstatsA numeric project id to fetch stats for directly (instead of a slug).
orderBydiscoverTaiga's supported ordering, passed through — e.g. total_fans, total_activity.
maxRecordsallGlobal cap across every source (one row = one billable event).
tokenallOptional Taiga auth token for a private instance (Authorization: Bearer). Never logged.
extraHeadersallOptional extra request headers (JSON).

Modes

  • discover (default) — paginated ?discover_mode=true → one flat row per public project: id, name, slug, description, createdDate / modifiedDate, isPrivate, isFeatured, totalFans, totalWatchers, totalActivity (+ last-week/month), totalStoryPoints, tags, ownerUsername / ownerFullName, the is*Activated module flags, plus a lossless _raw. Taiga paginates via page and the x-pagination-count response header.
  • bySlug/projects/by_slug?slug=<slug> → one full project row (same key set as discover).
  • stats — resolve the project id (via by_slug from a slug, or a numeric projectId), then /projects/{id}/stats → one agile-metrics row: totalMilestones, totalPoints, closedPoints, definedPoints, assignedPoints, speed.
  • discovery/api/v1/stats/discover → one fleet-count summary row (projectsTotal), plus a single sample project.

Behaviour

  • Every field is read by key presence (dict.get) — Taiga projects differ in which optional fields they populate, so an absent field (total_fans, tags_colors, a null owner) yields null / [] for that column, never a crash. Unknown fields survive in _raw. Tags are unioned from both the tags array and the tags_colors map keys.
  • Timestamps (createdDate / modifiedDate) are normalized to ISO-8601 Z (millisecond precision dropped to seconds); a bare date is kept as YYYY-MM-DD. Point / speed metrics are preserved as numbers (a whole-valued float like 150.0 is narrowed to 150).
  • A source behind an anti-bot interstitial (a non-JSON 200), a 401 (Taiga's reply for a missing/private project), a 403/404, or a JSON body without a recognizable Taiga project shape 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 public projects → 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)