How JustinHarris.AI audits
We do this honestly. Here is what that means.
Outside-in by default
Most audits get done before we have access to your admin. Until you grant us Shopify Admin, GA4, Klaviyo, or your ad accounts, we are working from the same surface a paying customer sees: the storefront, the cart, the checkout flow we walk through ourselves, the emails and SMS that hit a real inbox we use for the test, and the structured data your pages serve.
We don't want to fake omniscience. We tag every finding so you can tell exactly what we saw, what we inferred, and what we don't know.
The three tags
OBSERVED. We saw it (or its absence) directly during the test window. Reproducible. Timestamped. If the finding is "your welcome email arrived 2 minutes after order," we cite the timestamp from our cadence log. If the finding is "no abandoned-cart email arrived in 72 hours," we cite the empty log row. Either way, the evidence is in the audit, with the test inbox and the date the test ran.
INFERRED. HTML and network signals plus pattern likelihood. The fingerprint of the thing, not the thing itself. "Klaviyo is connected to the storefront" is INFERRED from the Klaviyo script on PDP and cart pages. Whether the flows inside Klaviyo are live, well-tuned, or producing revenue is not something we can see from outside. We say that explicitly.
UNKNOWN. Externally invisible. The audit's job here is to ask the right question, not to claim an answer we don't have. "What's the open rate on your welcome flow?" goes here. So does "what does your CX ticket volume look like?" and "what does your ad agency consider in-scope?" Every UNKNOWN finding ships as a discovery question, not as an assertion.
The test-order witness method
For any prospect site that takes money, we place a real test order from a dedicated inbox before we write the lifecycle section of the audit. The inbox convention is bifrost+<slug>[email protected], so the cadence log is segregated per prospect per audit. We capture every email and SMS for 7 to 14 days. We log the timestamps, the senders, the subjects, the links.
The result is a verbatim cadence log inside the audit. Every lifecycle claim cites a row in that log, or the claim is tagged UNKNOWN. There is no third option.
What we never claim without seeing
We do not claim "you have no welcome flow." We claim either "in the 7 days after our test order, no welcome email arrived to our inbox," with the cadence log row, or we tag the question as UNKNOWN and ask you. We do not claim "your conversion rate is X%." We do not claim "your CX team is the bottleneck." We do not claim "your ad agency is underperforming." None of those are externally visible. We will ask you in discovery instead.
What to do when a finding is wrong
If you read a finding and it looks wrong because you have something running that we couldn't see, tell us. That's the audit working as designed. The discovery questions section is built for exactly that: every UNKNOWN we name is a place for your team to plug in the truth. We update the audit and re-run the linter. You get a v2 of the audit with your data folded in, often the same day.
The goal is for the audit to be useful and honest, in that order.