Skip to content
← Blog & Education · workflow 11 min read

Working with an external auditor, from the invitation to the signature

An external audit runs on two things: a list of requests and the evidence that answers them. This is the whole loop in Talarity — issuing the link, working the request list from both sides, and ending in a signature you can check afterwards.

By The Talarity team · August 30, 2026

An external audit is, operationally, a list. The firm asks for things, you provide them, the firm accepts or comes back for more, and at the end somebody puts their name to a conclusion. Everything else — the fieldwork, the sampling, the write-ups — hangs off that list.

Talarity runs that list in one place, with the audit firm working it from outside your tenant. This article follows a single engagement all the way through: issuing the auditor’s link, the request list moving in both directions, the two things the auditor can do that most people do not expect, and the signature at the end — which is checkable, on demand, months later.

A companion article, The auditor portal — what a grant actually gives away, covers the boundary question in depth: exactly what a grant lets an auditor reach, and where the fence really sits. This one is about the work. Where the two overlap, this one states the conclusion and points there for the reasoning.

The one-paragraph model

An external auditor has no Talarity account. They hold a grant: a row pinned to one engagement, carrying an expiry, an allowlist of documents, two capability switches, and a bearer token that opens a portal page. The grant is revocable at any moment and consumes no licence seat. Everything below is a consequence of that shape.

Go to Audit & Evidence → Audit → Auditor Portal, on the Auditors tab, and choose Invite auditor. The dialog asks for four things and offers a fifth:

  • The engagement. A grant is pinned to exactly one. If your organisation has no engagements yet, the field says so and Send invitation is disabled — that is a correct dead end, not a broken dialog, and the copy tells you where to create one.
  • Auditor name and email. The email is where the link goes, and it is also the identity the uniqueness rule below is enforced on. Settle it before you press Send.
  • Access expires. Pre-filled sixty days out. You can shorten it freely; you cannot extend it past 180 days, and a date in the past is refused outright rather than quietly replaced with a default. Both limits are enforced when you press Send, not by the date picker — it will let you type a date the invitation then refuses, and the refusal says which limit you crossed. Leaving it blank gives you the sixty days.
  • Scope. Two pickers — evidence packages and workpapers — that add chips to an allowlist, and two checkboxes, Allow findings and Allow sampling, both off by default.

The Invite auditor dialog, open over the register and shown in full. Engagement is a select already reading "Access management review 2026"; Auditor name and Auditor email are still empty, showing their placeholders "Full name" and "auditor@example.com"; Access expires is pre-filled with 11/04/2026 under the note "Defaults to 60 days from today if left blank." Below those fields the entire Scope section sits in the same dialog rather than behind a second step: a paragraph stating that scope is an explicit allowlist for evidence packages and workpapers, that anything added to the org later is NOT auto-shared, and that it does not narrow the engagement itself, because the auditor can see, comment on, and accept or reject every PBC request on this engagement whatever is listed here. Evidence packages reads "None added" beneath a note that no finalized evidence bundles exist in this organization yet and that the auditor can still be invited. Workpapers offers a "Select a workpaper..." picker with an Add button and also reads "None added". Allow findings and Allow sampling are both unticked, and Cancel and Send invitation close the dialog.

The packages picker offers finalized evidence bundles only. A bundle you are still assembling does not appear, and that is deliberate: sharing a package that is still moving would hand an outside firm a document that changes underneath their conclusion. If your organisation has no finalized bundles yet, the picker says exactly that and offers you the option of inviting the auditor now and adding packages later with Manage scope. The invitation does not have to wait on the evidence.

The Manage scope dialog — the same scope controls reached again on a grant that already exists, rather than the scope half of the invitation. Its heading is Manage scope, its confirming button is Save scope rather than Send invitation, and it names the grant it will change: "Dana Whitfield — Access management review 2026". The same allowlist paragraph appears, and Evidence packages still reads "None added" under the note that no finalized evidence bundles exist yet. Workpapers is the half that differs: beside the "Select a workpaper..." picker and its Add button, a chip records one already on the grant — "Access provisioning control test — Q3 2026 (draft)", with an x to take it off again — so this dialog shows scope being amended rather than set for the first time. Allow findings is ticked on this grant and Allow sampling is not, which is what an amended scope looks like: the capability switches are off when an invitation is issued and stay off until someone turns one on. Behind the dialog the register is fully in frame with no horizontal scrolling — each row carries its controls on a second line beneath it, so a live grant shows Manage scope, Edit details, Change engagement and Revoke, while a revoked one shows three, with Revoke greyed out and relabelled Revoked.

One thing in that dialog is worth naming before you meet it again further down. Allow findings is ticked on this grant and Allow sampling is not. Both switches are off when an invitation is issued — the state frame above it shows — and this is what it looks like after somebody has deliberately turned one on for a particular auditor. They are per-grant, not per-org, and the two of them are the subject of Sampling and findings below.

The part to read before you press Send

The portal link is generated once, shown once, and stored nowhere. Talarity keeps a salt and a hash of the token so it can check the credential; the credential itself exists in the response that draws the success dialog, and in the invitation email — whose stored copy is redacted once it has been sent. There is no resend, reissue or reveal verb anywhere in the product, for anyone, including a platform administrator.

So the success dialog matters more than a confirmation usually does. It carries the URL in a text box with a Copy link button. Copy it there, or rely on the email arriving. If both are lost, the only recovery is to revoke the grant and invite again, which mints a new token and sends a new email.

The success dialog after an invitation is sent. It is headed "Invitation sent" and states that a portal invitation was emailed to t.okafor@ashgrove-assurance.example. An amber panel beneath says "This link is shown once." and explains that the link carries the auditor’s access token, is never stored or shown again, and should be copied now if it is also to be shared directly. Below that the portal URL sits in a read-only text box, truncated at the box’s width, with a Copy link button beside it, and a Done button closes the dialog. This is the only time the credential is ever shown.

Which brings up the rule that makes “revoke first” more than advice: one live grant per auditor per engagement. Invite the same address on the same engagement twice and the second is refused, naming the grant standing in the way. Revoke that one and the new invitation goes through. The refusal is checked before the token is minted, so a refused invitation never burns a credential. The rule is per engagement — the same auditor on a different engagement is unaffected — and it holds on the edit path too, so renaming an existing grant onto a colleague’s address is refused for the same reason.

The refusal when an address that already holds a live grant is invited again on the same engagement. The dialog is Invite auditor with a red panel at the top reading "Invitation failed: Dana Whitfield already has an active portal grant on this engagement. It expires 2026-10-14. Revoke that grant to issue a new one for this engagement. A grant for the same auditor on a different engagement is unaffected." It names the grant standing in the way, gives its expiry date, says what would clear it, and bounds the refusal to this engagement rather than to the auditor. The fields beneath show what was actually submitted, and they are worth reading together: Auditor name reads "Rowan Eskdale" while Auditor email reads "dana.whitfield@ashgrove-assurance.example", and the error names Dana Whitfield. The grant is keyed on the address, not on the name typed beside it.

The register

The Auditors tab is a register rather than a settings screen, and it is worth reading as one. The header row carries the auditor’s name with their email beneath it, the engagement the grant is pinned to, a status pill and the expiry date; beneath each of those, on the record’s own second line, sits the thing people miss — Last access, under a small-caps label rather than in a column of its own. A grant that has never been opened reads Never. One that has been opened carries a timestamp with Used once or Used 15 times beneath it.

That line is the answer to a question nobody thinks to ask until an incident: did the link we issued in March ever actually get used? Revoked grants stay in the register rather than disappearing, so it is a history of who held a key and whether they turned it — and because it only ever grows, it carries a search box and a pager. Export register (CSV) takes the whole thing out, and the Sign-offs tab has its own export.

Which is why the register folds, and the note above the table states the arithmetic outright: 6 auditors and the 17 grants issued to them. Each row is one auditor’s current grant on one engagement; the grants that came before it sit under a small expander on that same row — ▶ 3 earlier grants on Tomas Okafor’s, ▶ 8 earlier grants on Dana Whitfield’s. The 6 rows plus those 3 plus those 8 are the 17.

Superseded grants accumulate because Re-issue link is a revoke followed by a mint rather than an edit: a re-issued link always leaves behind the grant it replaced, ended and dated. None of them are ever deleted, and that is the point — a revoked grant is the custody record for a period in which somebody really did hold a key, so deleting it would delete the evidence that they did. The register therefore keeps both readings in reach: per auditor, expand the row and read that auditor’s chain; for the whole population, Export register (CSV) writes every grant on its own line, folded or not. The fold is presentation only. It changes how many rows you scroll past, not what the register holds.

The auditors register on the External Auditor Portal page, with an amber banner above it reading “1 finding proposed by an external auditor is waiting for review.” and a tab strip of Auditors, Proposed findings carrying a badge of 1, and Sign-offs. Export register (CSV), Access policy and Invite auditor sit above the table, and a search box sits inside it. A note between them reads “This register lists 6 auditors and the 17 grants issued to them”, and goes on to say that each row is an auditor’s current grant on one engagement, that the 11 earlier grants — revoked, expired, or replaced when a link was re-issued — are kept on the row that replaced them under earlier grants, and that nothing is removed from the register because Export register (CSV) lists every grant on its own line. 6 rows are visible, one each for Tomas Okafor, Iris Calderon, Dana Whitfield, Mireille Okonkwo, Rowan Eskdale and Priya Raman — no auditor appears twice — and the pager beneath them reads Showing 1–6 of 6 alongside 25 / page and Page 1 of 1. Each record spans two lines: the first carries the auditor’s name with their full email address beneath it, the engagement the grant is pinned to, a status pill and an expiry date; the second carries LAST ACCESS under a small-caps label, then that record’s own controls. Every address renders whole, including the longest, mireille.okonkwo@ashgrove-assurance.example. 2 rows are Active — Dana Whitfield’s and Priya Raman’s — and each carries the full cluster of 6 controls: Manage scope, Edit details, Change engagement, Extend access, Re-issue link and Revoke. The remaining rows are Revoked and carry Edit details alone, a revoked grant staying on the register rather than vanishing from it. 2 rows also carry a small expander holding the grants that preceded the current one, reading “3 earlier grants” on Tomas Okafor’s row and “8 earlier grants” on Dana Whitfield’s, which with the 6 visible rows accounts for all 17. Last access distinguishes three things and not two: an italic “Never” on Mireille Okonkwo’s grant, which nobody ever opened; “Aug 13, 2026, 10:16 PM” with “Used once” beneath it on Priya Raman’s; and counted timestamps on the rest, “Used 15 times” on Tomas Okafor’s, “Used 20 times” on Iris Calderon’s, “Used 2 times” on Dana Whitfield’s and “Sep 02, 2026, 02:45 PM” with “Used 9 times” on Rowan Eskdale’s. The column records how often a link was used, not merely whether it was.

Per-row actions on a live grant are Manage scope, Edit details (to correct a typo in a name or an address without re-issuing anything — it does not touch the token, the scope or the expiry), Change engagement, Extend access, Re-issue link and Revoke. A revoked row carries Edit details and a spent Revoked marker and nothing else: re-pinning, extending or re-issuing a grant somebody deliberately ended is refused by name, and a button whose only outcome is a refusal is a dead end. ⛔ Re-issue link is destructive and says so before it runs — it revokes the current grant and mints a replacement, so the link already in the auditor’s inbox stops working immediately. Revoke is one-way; there is no un-revoke.

What the auditor arrives at

The auditor opens the link and lands on a page outside your app shell, with no sign-in. The token travels in the query string, so the page reads it into memory and then strips it out of the address bar — a bearer credential sitting in the location bar ends up in every screenshot and every screen-share of the auditor’s own workspace. It is put back as the page is being left, and stripped again if the browser restores the page from its back-forward cache, so a reload still works — but the recoverable thing is the saved URL, not the tab.

The tab strip is the scope, rendered. Seven tabs exist — Workspace, Packages, Workpapers, Sampling, Findings, PBC Requests, Sign-off — and Sampling and Findings ship hidden, revealed only when the grant carries those capabilities. An auditor whose grant allows neither never sees that the tabs exist.

The Workspace tab opens on four counts: Packages, Workpapers, Open PBC and Total PBC. Two things about those numbers are worth knowing, because they are the sort of detail that decides whether a number can be trusted:

  • Open means still requiring work from your side, and that includes requests the auditor has rejected — a rejection is not a closure, it is a request to try again. The organisation’s own sidebar badge on the PBC queue reads the same three-status list — literally the same constant, not a second definition that happens to agree — so the two ends of the engagement cannot drift apart on what counts as outstanding. The populations differ, and deliberately: the auditor’s tile is fenced on their engagement, while the sidebar badge spans your whole org. The one thing the badge additionally drops is requests belonging to an advisory engagement that has already finished — a closed engagement chases nobody — so it is org-wide rather than unfiltered.
  • If the count cannot be read, the tile shows an em-dash and a notice saying so, rather than a zero. “Nothing outstanding” and “we could not tell you” are different sentences, and the reader of this screen is the one person who must not be told the first when the second is true.

The auditor’s landing page outside the app, headed Auditor Portal over "Meridian Advisory Group" and "Engagement: Access management review 2026". The tab strip carries only Workspace, Packages, Workpapers, PBC Requests and Sign-off — Sampling and Findings are not there at all on a grant that allows neither. The Engagement overview card greets "Welcome, Tomas Okafor. Your access expires 11/5/2026." above four counts: 0 packages, 0 workpapers, 1 open PBC and 2 total PBC. A callout below them states that evidence packages and workpapers are shared with the auditor explicitly, so only the ones shared are visible; that PBC requests are different because every request on the engagement is visible; and that nothing else in the organization is.

The Packages and Workpapers tabs list exactly what the grant allowlists, nothing more. If a document you shared has since been deleted, the row stays and is badged no longer available; if the read itself failed, it is badged could not be loaded. Those two are deliberately not the same badge, and the reason runs one way only: telling an outside firm a document is no longer available is an affirmative statement that you withdrew it, and a query that merely errored must never manufacture that. Neither says anything about you. And note the asymmetry, because it is the one that surprises people: un-sharing a document does not produce a badge at all — the id leaves the allowlist, so the row simply stops appearing.

The request list, from both sides

This is the part the engagement actually runs on.

Your side of it is Audit & Evidence → Audit → PBC Requests (/app/audit/pbc): the familiar request queue, where requests are raised, assigned, fulfilled by attaching evidence, and reviewed. The auditor’s PBC Requests tab is the same queue, seen from outside.

Three things about that queue matter and are easy to get wrong:

The auditor sees every request on the engagement, not only their own. The list is fenced on the engagement, not on who raised the row. If your team raised a request internally against the same engagement, the auditor can see it, read its comment thread and add to it. This is deliberate — an engagement’s request list is the engagement’s, not any one participant’s — but it means “we’ll track that one internally” is not a thing the request list supports. Track it somewhere else.

The auditor can raise requests. Filing a PBC request is not behind a capability switch; every grant carries it. That is the point of inviting an audit firm — asking for things is the job. What bounds it is volume rather than permission: a single grant may hold 200 open requests on an engagement at once — their own requests, counted per grant, so a co-auditor’s do not crowd them out — and the refusal, when it comes, names the number and says that fulfilling, accepting or cancelling some of them makes room. What stops counting is a request that is settled: accepted or cancelled. A rejected request still counts, on the same reasoning as the Open tile above — it is back with your team, not finished. So a long engagement does not walk itself into a wall, but rejecting your way through one will not clear the ceiling either.

The auditor can accept and reject. When your team fulfils a request, the status becomes submitted and Accept and Reject appear on that row in the auditor’s list — only on that status. That is the portal’s rendering rule, and the review action behind it agrees at the front end: it refuses a request still at requested, because there is no evidence to accept yet, and a cancelled one outright. It does allow a second look at a request already decided — the buttons stop being offered, not the judgement being revisited. Accepting closes it; rejecting sends it back, and the reviewer’s note travels in the notification — its first 160 characters — rather than only as a link to go and read it, though the notification carries that link too. Neither is behind a capability switch either: a grant that shares zero documents can still accept and reject evidence on its engagement.

Be precise about that last one, because it is easy to overstate in both directions. Accept and reject are not the auditor’s exclusive privilege — your own team holds the same review verb on the same rows from the in-app PBC page, and an internal reviewer accepting a request is a normal part of running the queue. The separation that is enforced runs the other way: there is no fulfilment verb on the portal at all. An external auditor can ask, comment, accept and reject. They cannot attach the evidence that answers their own request. That is the property worth relying on, and it is a property of the surface rather than of a permission — no verb exists to call.

The auditor’s PBC Requests tab. Its upper half is the File a PBC request form — a required Request field, a Details field labelled "what you need and why", an optional "Needed by" date and a Send request button — under a line explaining that the organization fulfils the request and attaches evidence, and the auditor then accepts or rejects. Beneath it "Requests on this engagement" lists both requests on the engagement rather than only the ones this auditor raised: "Access management review 2026 — evidence for the external audit", carrying a red Cancelled pill and the words "no evidence yet", which offers Comments and nothing else; and "Provide the quarterly access review export", carrying an amber Submitted pill with "2 evidence item(s): Access removal tickets — Q3 closures, Q3 privileged access review export" and a due date of Sep 02, 2026, which offers Accept and Reject alongside Comments. The two decision buttons appear on the submitted row and on no other.

The comment thread is shared, on the request, in both directions.

Sampling and findings — the two switches

These are the only two things in the portal behind a capability flag, and both are off unless you turn them on.

Allow sampling lets the auditor draw a statistical sample over the evidence in the packages you have already shared — never over anything else. If any allowlisted package cannot be read at the moment they draw, the request refuses rather than sampling what it can see. A sample drawn from part of a population is not a sample, and it would otherwise be signed off as one.

Allow findings lets the auditor propose a finding. What lands in your register is a draft — status proposed, marked as originating from an external auditor — held out of the normal findings list until somebody on your side accepts it. It raises a nav badge so it is not waiting silently. An outside firm can put a finding in front of you; it cannot put one in your register.

The same auditor’s tab strip after both switches are turned on: Sampling and Findings have appeared between Workpapers and PBC Requests, making seven tabs where there were five, on the same grant and the same link. Everything below the strip is unchanged — the same Engagement overview card, the same greeting to Tomas Okafor with the same expiry of 11/5/2026, and the same four counts of 0 packages, 0 workpapers, 1 open PBC and 2 total PBC — so the only thing this frame changes against the one above is what the strip offers.

Signing off, and checking the signature later

The Sign-off tab is a statement box and a signature name. The auditor writes their own conclusion and signs it.

The Sign-off tab before anything is submitted. The card is headed Engagement sign-off and says that sign-offs are cryptographically sealed and permanent. Beneath that a required Statement box for the auditor’s conclusion stands empty, a required field labelled "Your name (signature)" stands empty, and a Sign off button sits below them. Nothing else on the tab records a decision, and no sign-off is listed yet.

What is recorded is not just the text. Talarity builds a canonical payload from the organisation, the engagement, the grant, the statement, the signed name and the timestamp, and signs it with a keyed hash. The row lands in an append-only table with a database trigger that refuses both UPDATE and DELETE, and a unique index that permits exactly one sign-off per grant per engagement — so a double-click or a client retry cannot produce two signatures, and the loser of that race is told it has already signed rather than shown an error for something that succeeded. Your compliance recipients are notified: the terminal event of an engagement should not be something you discover by going to look.

Back in your own tenant — the Sign-offs tab of the Auditor Portal page, signed in as yourself — each signed row carries a Verify control. This is one of the places the two surfaces are easy to confuse: verification is yours, not the auditor’s. Nothing on the portal offers it, and the verify call requires a real authenticated principal in your organisation rather than a portal credential. Press it and the label resolves:

  • Verified ✓ — the payload was re-derived from the stored row and the signature matches.
  • Not signed — there is a row but no signature on it, which in an append-only signed register is an anomaly worth being able to confirm rather than infer from a blank cell.
  • MISMATCH — the stored content no longer matches what was signed. That is a finding, not a display problem.

The control renders on every row, including an unsigned one, which is why the presence of the button proves nothing and the resolved label proves everything. Verification re-derives the payload from the same builder the signing path uses, so the two can never disagree about the shape of what was signed.

A signed row on the Sign-offs tab of the organisation’s own External Auditor Portal page, after Verify has been pressed. The table carries three columns — Engagement, Signed by and Signed — and the record continues on a second line beneath them under its own small-caps labels. The row reads "Access management review 2026"; Dana Whitfield, with dana.whitfield@ashgrove-assurance.example beneath the name; and the full timestamp "Aug 14, 2026, 07:53 PM". Below that, under STATEMENT, the sign-off itself runs the width of the table on one line — "We have completed the agreed procedures for this engagement and have no further requests outstanding." — and under SIGNATURE HASH a truncated digest "8655e035c9d0…" sits beside the control, which now reads "Verified" with a tick. The label, not the button, is the thing that carries the answer.

When access ends

Four refusals about the link itself, each named rather than folded into a generic error, because the person reading them is outside your company and needs to know which one they are looking at:

what the auditor seeswhat happened
This auditor access link is not valid. Open the most recent link from your invitation email.The credential does not resolve — a wrong or truncated link. It reveals nothing else: no organisation, no confirmation that a grant exists.
This auditor access link has expired. Ask the organization that invited you to issue a new one.The expiry date you set has passed.
This access link was revoked by the organization.You revoked the grant.
Too many attempts. Please try again in a few minutes.Ten failed token attempts locked the grant for fifteen minutes.

Only the last of those offers a Try again button. Retrying an expired, revoked or malformed link fails identically, forever, so the portal withholds the control rather than handing an outsider an instruction that cannot work.

There is a fifth thing the page can say, and it is not in the table because it is not a verdict on the link at all: if Talarity itself cannot be reached, the auditor is told exactly that — this is a problem reaching Talarity, not a problem with your access link — your link is fine — and offered Try again. It matters because the button is the quickest way to tell the two apart on sight: a refusal with no Try again is about the grant, and one with it is about the moment.

The portal opened on a revoked link: a red "Access Not Available" heading over the single line "This access link was revoked by the organization.", the Powered by Talarity footer, and nothing else. There is no tab strip, no engagement detail and no Try again control, because retrying would fail in exactly the same way.

Expiry and revocation are re-checked on every action, not only when the page loads — so revoking mid-session ends the session’s next read, rather than waiting for the auditor to reload.

What is recorded

Every state-changing action across the whole loop is written to the audit trail — invitations, revocations, scope changes, engagement re-pins, and every one of the six things the auditor can change from outside: raising a request, commenting on one, reviewing one (accept or reject), drawing a sample, proposing a finding and signing off. Those six are the mutations; the portal offers a further seven read actions on top of them, and the trail does not stop at changes either — opening a workpaper PDF through the portal is recorded as well, so disclosure is on the record and not only mutation. The auditor’s actions are attributed to the grant itself, with the member id and email, because an external auditor holds no user account to attribute them to. Register exports are logged too.

The result is that “who gave this firm access to what, when, and what did they do with it” is one query rather than a reconstruction. Which is, in the end, the same question the audit itself is asking of everything else.

The short version

  • Invite from Auditor Portal → Auditors. One grant, one engagement, sixty days by default and 180 at most.
  • Copy the link from the success dialog. There is no resend.
  • One live grant per auditor per engagement: revoke before you re-invite.
  • Scope governs the documents. The engagement governs the request list — an auditor sees every PBC request on it whatever the allowlist says.
  • The auditor can raise, comment, accept and reject. They cannot fulfil. Your team can review too.
  • Sampling and findings are the only two switches, off by default. A proposed finding is a draft you accept, not an entry in your register.
  • The sign-off is immutable and signed. Press Verify and read the label, not the button.
Loading…

Keep reading

See Talarity in action.

A 30-minute walkthrough or 60 days of early access — your call.