Can team members see each other's verification history?

Last updated May 20, 2026Team management

On Valid Email Checker, team members do not see each other's verification history. When a member opens Uploads & Results, they see only the bulk tasks they themselves uploaded. When they open Credits History, they see only the credit movements that came from their own actions. When they look at Verification Results, the table is filtered to results they personally produced. The owner is the only role on the account that sees the full activity across every member.

How the isolation is enforced

Two layers:

  • Query filter. Every team-member-side query against verification_tasks, verification_results, and credit_transactions filters by performed_by_user_id = current user. The query never returns rows attributed to other members in the first place.
  • Row-level security. As an extra guard, Supabase RLS policies on the same tables block team members from selecting rows where the performed_by is anyone else. Even a direct API call with their token cannot leak the rows.

What the owner sees vs what a member sees

SurfaceOwner seesTeam member sees
Credits HistoryEvery row from every member + ownerOnly their own rows
Uploads & ResultsEvery bulk task from every member + ownerOnly their own bulk tasks
Verification Results (single)Every single-email verificationOnly theirs
Team pagePer-member stats (sign-ins, credit usage)No access (link hidden)
Account credit balanceLive totalSame live total (read-only)

Why we keep this private by default

Three reasons:

  • Lists are sensitive. A team member's bulk upload may contain client lists, lead lists, or contacts they are not supposed to share with peers. Showing them in a cross-team view by default would be a leak.
  • Reduces noise. A 20-person team running daily verifications would produce a Credits History view with hundreds of rows per day if cross-visible — useless to any individual member trying to find their own activity.
  • The owner's view is the 'admin' view. Audit needs to be in one place, and that place is the owner dashboard. Splitting it across every team member adds noise without helping anyone.

What about the credit balance itself?

The credit balance is account-level and visible to every team member. It would be confusing not to show it — they need to know whether to start a 10,000-email job. But the balance is just a number; it does not expose which member spent what. The detailed movement log is the part that stays member-private. See do team members share my credits for the shared-pool model.

The owner cannot grant cross-visibility to other members
There is no setting to flip on that says 'let team members see each other.' If your workflow requires it, the workaround is to share the relevant data through your normal channels — export a CSV from the owner account, share via Slack/Drive/etc. We deliberately do not expose a cross-visibility toggle because it would normalize sharing data that some members may not want shared.

The owner side: how to see who did what

Open Credits History as the owner and every row shows the team-member name (or email) who triggered it. Open Uploads & Results and every task row shows the team member who created it. Open the Team page and you get per-member rollups: credits used this month, total verifications, last sign-in time. That is the audit story end-to-end.

If you want a member to be able to see another member's results, the cleanest path is for the second member to share their downloaded results CSV directly with the first. Cross-visibility within the app is not on the roadmap.