Share a migration live view with your client
Every migration job has a built-in client-facing status page — live % complete, files transferred, current phase, last 50 log entries — without giving the client access to your account. Generate a signed share URL, send it, and the client watches the job in their browser. No login, no download required.
Example read-only page the client sees. Source paths are redacted to leaf filenames; internal IDs and credential names are never shown.
WHAT THE CLIENT SEES
Their name and logo on top, a single progress bar with ETA, the five-phase pipeline, live counters, and a tailing log strip. Mobile-responsive, no login, revocable in one click. They don't see other jobs, your credential names, or internal IDs.
Before you start
- An active or completed migration job. Links work at any state — a link to a queued job lights up when the job starts.
- Admin or project owner role. Operator can view existing share links but not create new ones; Billing has no access. Configure under Settings → Team.
- Logo asset (optional). PNG/JPG/SVG/WebP under 512 KB. Uploaded to our CDN — never hotlinked.
Generating a share link
- Open the job detail page. Click Share in the top-right.
PauseCancelShare
- Fill in:
- Client name — shown as page heading.
- Logo — optional, live preview on the right.
- Expires in — days. Default 30, clamped 1–90 server-side; out-of-range values return 400.
- Show cost estimate — off by default. Enable only if the client pays per-GB.
Client name:ACME CorpLogo:acme-logo.png (86 KB)Expires in:30daysShow cost estimate:off - Click Generate link:
https://app.migrationfox.com/share/<jobId>?t=<signedToken>
Generated URLhttps://app.migrationfox.com/share/job_7a2e?t=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqb2JJZCI6ImpvYl83YTJlIiwiZXhwIjoxNzMzMzU2ODAwfQ.abc… - Send the URL. No setup on the client side.
DeliveryCopy link Email to…
TIP
For any migration with more than one wave, always generate a project-wide share link instead of per-job links. The client bookmarks one URL and watches every wave from the same page — no re-sending a new URL every Saturday night.
Reuse the same link across a project
You can generate a share link per-job, or a project-wide link from Project → Settings → Share, which lists every job in the project on a single page. For multi-wave SharePoint migrations, the project link is almost always what you want — the client bookmarks it once and watches all waves from the same page.
What the client sees
A read-only, mobile-responsive page:
- Client name and logo.
- Overall progress bar with % complete and ETA.
- Phase breakdown: Scanning → Provisioning → Transferring → Verifying → Complete.
- Live counters: files processed/remaining, throughput, errors.
- Last 50 log lines, source paths redacted to leaf filename only.
- Final-report download button on completion.
The client does not see: other jobs, credential names, internal cost math (unless enabled), your team roster.
Revoking a link
- Click Share → Manage links.
Manage links3 active · 1 expired · 0 revoked
- Find the row. Table shows creation date, expiry, last access, and access count.
ACME Corp · job_7a2e Apr 01 Expires May 01 hits 14 ×
- Click Revoke. Open tabs return a Link revoked page on their next poll (within 10 seconds).
Revocation is immediate — use it when shipping is imminent
Revoked tokens fail on every subsequent request. Stolen tabs cannot replay cached state.
Security model
No client login — that is the point — but the URL's bearer token is cryptographically bound to the job. Three layers:
- Signed JWT. The
t=parameter is a JWT signed with a tenant-scoped HMAC secret. Payload:jobId,projectId,exp,issuedBy. Any URL modification breaks the signature; unsigned/mis-signed tokens get a 401 before data loads. - Server-side revocation list. Revoked token IDs are checked on every request — even a valid signature fails if revoked. This is what makes revocation instant.
- Content filtering. The share endpoint uses a narrow projection: credential names, internal IDs, billing info, and full source paths are never selected, regardless of what the token claims.
Troubleshooting
"Link expired" before configured date
The issuer has been removed from the project. The issuedBy claim is checked against current membership on every request — deprovisioning invalidates outstanding tokens. Generate a new link from an active member.
Logo not rendering
Over 512 KB or unsupported MIME. Re-export as PNG under 512 KB and re-upload.
Access count stuck at 0
Counter increments on backend poll, not page load. A tab closed within the first 10-second poll window records no access.
What's next
- Migration Rehearsal dry-run — pair a signed rehearsal report with the live link for the full pre-cutover package.
- SharePoint Site Migration — the job type most often shared with clients.
- Webhooks — notify your own systems (Slack, PSA, ticketing) on job state changes in parallel.
- Agent Troubleshooting — if the client sees a stall on the live view, agent health is the first thing to check.