Portal Audit

Portal Audit setup guide

This guide covers installing Portal Audit in your HubSpot account, running your first audit, reading the report, and disconnecting the app. Nothing changes in your HubSpot account unless you approve it.

Before you start

Install the app

  1. Click Install on the Portal Audit page (https://audit.thejonmartin.com) or in the HubSpot App Marketplace.
  2. Sign in to HubSpot if asked, then choose the account to connect.
  3. HubSpot shows the permissions Portal Audit asks for; the tables below explain each one. You can uncheck any optional permission; the related report sections will then show "not assessed" (see Why these permissions).
  4. Click Connect app. You land on a confirmation page that shows your portal ID and how many permissions were granted.

Permissions the app asks for

Required:

HubSpot dataScopeWhat the audit reads
AccountoauthAccount details: portal ID, time zone, currency, data hosting location
Contactscrm.objects.contacts.readRecord counts (including totals of calls, meetings, notes and tasks; activity text is not stored) and field-completeness checks (counts only; no contact records are copied)
Companiescrm.objects.companies.readRecord counts, field-completeness checks, and a count of companies with num_associated_contacts above zero when that property is on the schema
Dealscrm.objects.deals.readRecord counts, open-deal field completeness, deal pipelines and stages, and pipeline definition-change counts (action and timestamp only)
Ticketscrm.objects.tickets.readRecord counts, field completeness, ticket pipelines and stages
Contactscrm.schemas.contacts.readProperty definitions (names, types, groups, usage flags), including lifecycle stage options and their order, and property validation rule types
Companiescrm.schemas.companies.readProperty definitions, including lifecycle stage options and their order, and property validation rule types
Dealscrm.schemas.deals.readProperty definitions and property validation rule types
Ticketscrm.schemas.tickets.readProperty definitions
Line itemscrm.objects.line_items.readRecord counts
Line itemscrm.schemas.line_items.readProperty definitions
Quotescrm.objects.quotes.readRecord counts
Quotescrm.schemas.quotes.readProperty definitions
Userscrm.objects.owners.readRecord owners (name, email, active/archived) to find unassigned or departed owners
Userssettings.users.readUsers and roles (name, email, role, super admin flag) for the access review
Userssettings.users.teams.readTeams and team membership
Segments (lists)crm.lists.readSegment names, types, sizes, last-updated dates, and deal-list filter property names
Account securityaccount-info.security.readLogin history, security activity and audit-log summaries (last 90 days); private-app API usage and daily headroom (currentUsage, usageLimit, resetsAt)

Optional (you can uncheck these; HubSpot also leaves them out if your plan lacks the tool):

HubSpot dataScopeWhat the audit reads
FormsformsForm names, types, dates, and configuration enums (lifecycle count, notify flags, consent type). Field values, consent copy, and notifyRecipients ids are not stored. Submissions are not read
Marketing emailmarketing-emailMarketing email names, states and settings (nothing is sent)
WorkflowsautomationWorkflow names, status, object type, enrollment settings and actions, plus deal-workflow property names (no workflow is changed)
Marketing emailcontentMarketing email inventory when the marketing-email scope is not enough (some portals require content)
Custom objectscrm.objects.custom.readCustom object record counts and field completeness
Custom objectscrm.schemas.custom.readCustom object schemas and property definitions
Websitecms.domains.readConnected domain names and flags (resolving, HTTPS, primary email). A declined scope skips the check
Goalscrm.objects.goals.readHow many goal targets exist (the id only; owner and creator ids are not requested)
Leadscrm.objects.leads.readWhether the leads object is turned on, then the lead total (one search, id only)
Meetingsscheduler.meetings.meeting-link.readHow many meeting links exist (the total only; link URLs and organizer ids are not stored)
Reportingreporting.full.readHow many custom reports and dashboards exist, not counting HubSpot's default reports, and how many reports are on no dashboard, were not viewed in 180 days, or were never viewed (counts only; report names are not kept)
Knowledge basecms.knowledge_base.articles.readHow many knowledge base articles exist. Article bodies are not requested
Feedbackcrm.objects.feedback_submissions.readHow many feedback survey responses exist (the total only; answers are not read)
Orderscrm.objects.orders.readHow many orders exist (the total only; amounts and line items are not read). Skipped when the permission is not granted or orders are turned off
Invoicescrm.objects.invoices.readHow many invoices exist (the total only; amounts and line items are not read). Skipped when the permission is not granted or invoices are turned off
Subscriptionscrm.objects.subscriptions.readHow many commerce subscriptions exist (the total only; amounts and line items are not read). Skipped when the permission is not granted or subscriptions are turned off
Commerce paymentscrm.objects.commercepayments.readHow many commerce payments exist (the total only; amounts, status, and payer details are not read). HubSpot lists this permission for Starter accounts. Skipped when it is not granted or payments are turned off
Sequencesautomation.sequences.readHow many sequences exist, read user by user because HubSpot lists sequences per user (counts only; sequence names, steps and enrolled contacts are not kept)

Write permissions are not on this install link. They are requested only from a Fix reauthorize on this same app, and nothing changes in your portal unless you approve it.

HubSpot dataScopeWhat a fix may change, only after you approve it
Contactscrm.objects.contacts.writeContact property updates for an approved fix. Not requested on the public install link. Unused until you approve a fix.
Contactscrm.schemas.contacts.writeContact property definition updates for an approved fix. Not requested on the public install link. Unused until you approve a fix.
Companiescrm.schemas.companies.writeCompany property definition updates for an approved fix. Not requested on the public install link. Unused until you approve a fix.
Dealscrm.schemas.deals.writeDeal property definition updates for an approved fix. Not requested on the public install link. Unused until you approve a fix.
Dealscrm.objects.deals.writeDeal property updates for an approved fix. Not requested on the public install link. Unused until you approve a fix.
Ticketscrm.objects.tickets.writeTicket property updates for an approved fix. Not requested on the public install link. Unused until you approve a fix.
Companiescrm.objects.companies.writeCompany property updates for an approved fix. Not requested on the public install link. Unused until you approve a fix.
Userssettings.users.teams.writeTeam changes for an approved fix. Not requested on the public install link. Team writes stay banned for customer portals.

Why these permissions

Configure the app and run your first audit

  1. After you install, you land on a confirmation page. Confirm your company's industry, size and website. This tailors the best-practice checks to your business.
  2. On the same page, two boxes are unticked until you tick them. The first chooses whether Portal Audit may read your public website and public sources about your company. If you leave it unticked, or choose "Continue without tailoring", no website or outside research happens and the report says it is not tailored. The second chooses org-chart enrichment (public job titles). It stays off unless you tick it, even if website research is on. Your first audit starts after this step.
  3. The audit runs. A typical portal takes a few minutes; large portals can take longer because the app stays well under HubSpot's API rate limits.
  4. You receive the first report within 1 day, after it is reviewed, as a PDF (and, on request, the underlying data as JSON or Markdown).
  5. Optional: a scheduled audit on a day and time you choose (monthly on Watch, weekly on Watch Weekly and Fix), with changes and fix-plan progress. The paid plans also accept a credit and seat usage file that you download from HubSpot's Credits tab. If you change plans, upgrades on the same billing period apply right away; downgrades take effect at the next renewal, with no refund for the current period, and your weekly or monthly schedule changes then (see Pricing).

See your audit in HubSpot

Open Portal Audit from the Marketplace icon in the HubSpot account where it is installed (Your recently visited apps). The page leads with what is working, then the quick wins, then the score, then the findings. A first audit that is still in review shows that status only.

Nothing changes in your portal unless you approve it. Opening this page does not ask for any new permissions.

Use the app: read the report

Disconnect and uninstall

You can disconnect at any time, in either of two ways:

What happens to your data:

Already installed, and new optional permissions were added

HubSpot does not add new optional permissions to an existing install on its own. To grant them:

  1. Sign in as a Super Admin (or a user with App Marketplace access) on the account.
  2. Open https://audit.thejonmartin.com/oauth/install?portalId=YOUR_PORTAL_ID (production: https://audit.thejonmartin.com/oauth/install?portalId=YOUR_PORTAL_ID).
  3. Leave the new optional permissions checked and click Connect.

That is a reauthorize. It does not reset your audit schedule and it does not start another first audit. The exact steps for the portal this app is operated from are in the repository file docs/SCOPES.md.

Get help

See Support, or email jon@thejonmartin.com.