🦊 MigrationFox Docs

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

Generating a share link

  1. Open the job detail page. Click Share in the top-right.
    PauseCancelShare
  2. 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 Corp
    Logo:acme-logo.png (86 KB)
    Expires in:30days
    Show cost estimate:off
  3. Click Generate link:
    https://app.migrationfox.com/share/<jobId>?t=<signedToken>
    Generated URL
    https://app.migrationfox.com/share/job_7a2e?t=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqb2JJZCI6ImpvYl83YTJlIiwiZXhwIjoxNzMzMzU2ODAwfQ.abc…
  4. 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 ProjectSettingsShare, 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:

The client does not see: other jobs, credential names, internal cost math (unless enabled), your team roster.

Revoking a link

  1. Click ShareManage links.
    Manage links3 active · 1 expired · 0 revoked
  2. Find the row. Table shows creation date, expiry, last access, and access count.
    ACME Corp · job_7a2e Apr 01 Expires May 01 hits 14 ×
  3. 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:

  1. 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.
  2. 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.
  3. 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