HandshakeAgency

Customer portal

Share reports and documents with your clients through their private portal. Turn it on per client, author consistent HTML reports, and let clients download PDFs.

Published July 9, 2026
4 min read
Updated August 9, 2026

Customer portal

The customer portal is a private space where you (the agency) share reports and documents with a client. Each client you manage can have their own portal, and they only see it once you turn it on.

This is an agency feature — it appears for accounts your agency manages, not for standalone accounts.

Turn the portal on for a client

The portal is off by default for every client, so nothing appears until you enable it.

  1. Go to your agency dashboard and open the client from your client list.
  2. On the client's detail page, find the Client portal section.
  3. Flip Reports & documents portal on.

Once enabled, the client sees a Reports & docs item pinned at the top of their sidebar. Turn it off any time and it disappears for them again — nothing is deleted.

Where the client sees it

When the portal is on, the client (or you, when you switch into their account) sees Reports & docs in the sidebar. It has two tabs:

  • Reports — the HTML reports you publish, which the client can read and download as a PDF.
  • Documents — file downloads (coming soon).

The client only ever sees published reports. Drafts are visible to your agency only.

Create a report

From the client's portal (switch into the client account, then open Reports & docs), click New report. Reports are written in HTML, and you have two modes:

In standard mode you write the content only and it's wrapped in one shared report template. This is what keeps every report looking consistent — same header, typography, tables, and spacing — instead of each report having a different layout.

Write plain semantic HTML using this kit (don't add your own <style> — the template handles all styling):

  • <h2>Section title</h2> — a section heading

  • <p>…</p>, <ul><li>…</li></ul>, <a href>…</a> — body copy

  • KPI cards:

    <div class="kpi-grid">
      <div class="kpi"><b>1,284</b><span>Organic clicks</span></div>
      <div class="kpi"><b>+18%</b><span>vs. last month</span></div>
    </div>
    
  • <table>…</table> — an auto-styled data table

  • <div class="callout">…</div> — a highlighted note

The report title and date come from the template header, so you don't need to repeat the title in the body. A live preview on the right shows exactly what the client will see as you type.

Raw HTML (escape hatch)

For a one-off bespoke report, switch to raw HTML and paste a full standalone HTML document. It's used exactly as written. Use this only when you need a layout the standard template can't produce — most reports should stay standard so they match.

In both modes, scripts never run: reports render in a sandbox, so pasted HTML is safe.

Publish, edit, and unpublish

  • Save draft keeps the report private to your agency.
  • Publish makes it visible to the client.
  • Editing a published report gives you Update (save changes, stays published) and Unpublish (revert to a draft the client can no longer see).
  • Delete removes a report permanently.

What the client does

The client opens a published report from their portal and reads it in place. Download PDF opens their print dialog — choosing "Save as PDF" produces a clean, text-based PDF (not a screenshot), so it stays crisp and selectable.

Create reports with an AI agent (advanced)

If you use the Diviner One MCP tools, an agent can author reports straight into a client's portal with pr_portal_report_create — pass the client account, a title, and the report body (the same standard kit above). The report is created as a draft by default (set publish=True to publish immediately) and is marked as agent-authored. The client's portal must be enabled first, or the call is refused.

This is the fastest way to turn data you already have into a shareable, on-brand report: describe the report to your agent and it writes the HTML for you.