PerfCopilot

Perdoo Goals

Perdoo is an OKR platform with Objectives containing Key Results. PerfCopilot syncs both: Objectives become Goal rows, Key Results become GoalKeyResult rows.

One notable difference from other goal providers: Perdoo uses Authorization: Token <api_key> (not Bearer) in its auth header.

What we pull

  • Objectives — fetched from GET /objectives/?owner=<user_id>. Perdoo uses Django REST Framework pagination (results array). Fields: name or title, description (capped at 1,000 characters), status, start_date/end_date or due_date, created_at.
  • Key Results — pulled from the key_results or results array on each Objective. Fields: id, name, status, target_value or target.

Status mapping:

| Perdoo status | PerfCopilot | |---|---| | successful, completed, done, achieved | completed | | behind, at_risk | at_risk | | unsuccessful, off_track, missed | off_track | | ongoing / anything else | on_track |

unsuccessful maps to off_track; ongoing maps to on_track.

Connecting

  1. Go to /admin?tab=integrations, find the Perdoo card.
  2. Get your API key from Perdoo: Settings → API (requires Perdoo admin access). Token auth, not OAuth.
  3. Enter the key in the integration card. Base URL defaults to https://app.perdoo.com/api/v3.
  4. Map each employee's Perdoo user ID in the unmapped-employees list.

What hits a review

Goals and Key Results appear in the [GOALS] block of the review prompt.

Troubleshooting

Auth errors (401): confirm you're using Token <key> auth — Perdoo does not use Bearer. The PerfCopilot ingester handles this correctly, but if you're testing the API directly, use Authorization: Token <your-key>.

Zero objectives: the owner query parameter must match the employee's Perdoo user ID exactly. Perdoo user IDs are UUIDs visible in the URL when viewing a user in Perdoo admin.

Key Results under results vs key_results: the ingester checks both field names. If Perdoo's v3 API uses a different field, KRs won't appear. Verify the field name in Perdoo's API docs or contact support.

Privacy notes

  • Objective descriptions are stored up to 1,000 characters and visible to managers.
  • The hard cap is 200 objectives per employee per sync. Orgs with very active OKR cycles should confirm active objective counts stay under this limit.