Troubleshooting
Login / session
"Continue with Google" loops back to the login page
Check that you're not logged in as the demo account in the same
browser. /login and /register invalidate the session on mount, but
some browser extensions race that. Clear cookies for app.pmfriend.com,
reload.
Sandbox iframe on pmfriend.com shows the login page
Expected if third-party cookies are blocked (Safari ITP, Brave,
Firefox Enhanced Tracking Protection strict mode). The sandbox uses
CHIPS (Partitioned cookies) + CSP frame-ancestors to work around ITP
in most mainstream configurations. If yours is stricter, log in
directly at https://app.pmfriend.com instead.
Invite link shows "This invite has expired or already been used"
Invites live for 7 days. Have your agency admin issue a fresh one under Settings → Team members → Invite. If within 7 days, check whether someone else already claimed the URL — invites are single-use.
CSV imports
"row N: invalid state"
Use the 2-3 letter code (VIC, NSW, QLD, WA, SA, TAS, ACT,
NT), not the full name. Case-insensitive but the codes only.
"row N: owner_approval_threshold must be integer cents"
Use cents, not dollars. $500 → 50000. Decimal values (500.00)
fail validation.
Some rows loaded, others didn't
Expected — each row is its own transaction. The errors panel lists which rows failed and why. Fix those rows in your CSV, save, re-upload. Dedupe keys mean good rows aren't re-inserted.
Uploaded a CSV but nothing shows up
Check the errors panel — it might be the first-row header mismatch
(streett,suburb,… instead of street,suburb,…). The header is
validated strictly.
AI triage
"Human triage required" badge on every request
Means either confidence < 0.7 consistently, or Claude is unavailable
(circuit breaker open). Check ANTHROPIC_API_KEY is set on App Runner
and that you haven't hit a 3-fail-in-a-row window. Re-try in 5 minutes.
Triage returns nothing at all
Tenant text is empty or under ~5 words. The UI prompts you to enter more detail before calling triage. If the field has content but triage still 422s, file a ticket with the request ID.
Claude keeps returning the same urgency
Confidence is usually very high for unambiguous cases. If you disagree with a consistently high-confidence pick, edit in the review form (Claude's suggestion is never auto-applied). If you think the prompt is wrong, send us the request text and we'll look at the fixture.
Contractors
Contractor never received the magic link
- Check the contractor's email address is correct in the Contractors page.
- Check their spam folder — we don't DKIM-sign yet (SES wire-up pending), so some Gmail + Outlook configurations mark it as junk.
- Copy the plaintext URL from the WO detail page and send it via WhatsApp / SMS directly.
"Contractor accepted but status stuck at ACCEPTED"
Contractor needs to pick a date via the Schedule button. Until they do, the WO stays at ACCEPTED. The PM can chase via the contact info on the WO page.
Invoice upload fails silently
Check file size (< 10 MB) and format (PDF or image). The upload
endpoint is POST /api/v1/jobs/{token}/invoices — plaintext POST,
multipart/form-data, single file field.
Compliance
New property has no compliance tasks
State field may be missing or misspelt. Open the property detail → Overview → State field. If it's blank, set it; the register is regenerated on next save.
Compliance task stuck in UPCOMING status after completion
Completion happens automatically when a linked WO transitions to
COMPLETED. If you manually closed the WO in an unusual way (e.g. via
DB), the compliance task won't know. Mark it complete manually:
POST /api/v1/compliance/tasks/{id}/complete.
Notifications
Unread count is wrong
Cached on the client. Refresh the page. The badge fetches
/api/v1/notifications?limit=1 with an unread-count header.
Never received email for an urgent request
Email delivery via SES is not yet wired (see Product Roadmap). Today, urgent events land in the in-app feed + unread badge only. Turn browser notifications on so you see the badge bump.
Still stuck?
Email hello@pmfriend.com with:
- Your agency name
- The request / WO / property ID
- What you expected vs what happened
- Browser + OS
- Timestamp (for log correlation)
We aim to respond within 4 business hours AEST.