Martech QA Checklist: 12 Tests Before a Launch
A martech release is ready when the intended customer journey works across tracking, CRM, data models and messaging, with evidence for both success and failure cases. Builder QA checks the implementation against the agreement. User acceptance testing checks whether the business can operate it. Record the tested versions, unresolved issues, recovery path and accountable sign-off before widening production use.
On this page
What is the difference between QA and UAT?
Quality assurance asks whether the build behaves as specified; user acceptance testing asks whether the intended users can complete the real job. Both need explicit expected outcomes, and neither is replaced by a successful connection screen.
| Review | Main question | Typical evidence | Who accepts it? |
|---|---|---|---|
| Builder QA | Does the implementation match the agreed rules? | Payloads, record changes, query results and negative-case outcomes | Technical owner or reviewer |
| Business UAT | Can the actual role perform the required workflow? | A user finding, understanding and acting on the correct record or report | Accountable business owner |
| Production acceptance | Did the released configuration preserve the tested outcome? | Version check and controlled production sample | Named release and operating owners |
Microsoft's implementation guidance likewise distinguishes unit, functional, process, end-to-end, user-acceptance and regression testing. Use that separation to organize the evidence; a martech release needs the connected customer journey rather than isolated green checks in every tool. Microsoft test-strategy checklist
The martech RACI names the accountable signer and operator. Our tracking implementation work should supply testable definitions and evidence while the business retains acceptance of the intended customer treatment and reporting meaning.
What belongs in the test plan before implementation starts?
Define scope by journey and outcome, then name the systems and versions that must support it. “Test HubSpot” is too broad; “an accepted demo request reaches the correct sales owner and appears once in the weekly request report” is testable.
Entry criteria should include a tracking contract, CRM property-ownership rules and the relevant metric definition. Where those are unresolved, record the missing decision before asking a tester to infer what success means.
Use a case record such as this original template:
case_id: demo-existing-contact
journey: accepted_demo_request
fixture: controlled_existing_contact
versions: candidate_release_reference
expected:
source: one_accepted_submission
crm: existing_contact_preserved_and_request_routed
warehouse: one_row_for_the_submission_id
evidence_required:
- source_acceptance_record
- destination_record_and_property_history
- model_row_and_reconciliation_result
tester_role: sales_representative
result: not_run
blocking_if_failed: trueThe template is deliberately not marked passed. Record the actual result after execution and link the evidence for the candidate version. A screenshot from an earlier build is not proof that the current one works.
Use controlled identities and a test marker, with a plan to exclude synthetic activity from business reports and remove temporary access. Keep the permitted retention of test evidence separate from deleting operational test records. Do not copy sensitive production data into a test environment simply because a sandbox supports it.
Where can you test without changing the live workflow?
Use an environment appropriate to each system, and verify its outbound connections. A staging website or CRM sandbox is not isolated if its tags, credentials or message destinations still point at production.
Tracking environments and DebugView
GTM custom environments can publish a candidate container version to Dev or QA without changing Live. Live always points to the published container version. Shared preview is another way to inspect a candidate, but inspect its destination IDs and outgoing requests too. GTM environments
GA4 DebugView requires debug mode. Google says to remove the debug_mode field to disable it; setting it to false is insufficient. Events can be invisible in DebugView when client privacy controls apply or analytics consent is denied under Consent Mode. GA4 DebugView behavior
For denied-permission tests, inspect the actual consent state and network behavior against the approved design. Absence from DebugView is not proof that no request left the browser. Basic and advanced Consent Mode can have different expected requests; use the Consent Mode guide rather than a universal “zero Google requests” assumption.
CRM sandboxes
HubSpot's standard sandbox capability requires an eligible Enterprise subscription, with Super Admin access to create and deploy. Production integrations are not connected automatically, record IDs differ, and test email is limited to records sharing the email address of sandbox users. Its optional initial copy includes the most recently updated 5,000 contacts and associated records. HubSpot sandbox requirements
Connect test versions of integrations deliberately. A test that writes to a real Salesforce organization or production email audience has crossed the boundary even if HubSpot displays a sandbox banner.
| Salesforce sandbox type | Data starting point | Refresh interval | Test implication |
|---|---|---|---|
| Developer | Metadata | Once per day | Seed the relevant controlled records |
| Developer Pro | Metadata, with more testing capacity | Once per day | Still requires suitable test data |
| Partial Copy | Template-selected subset of production data | Five days | Confirm coverage and handling of copied data |
| Full Copy | Full production copy | Twenty-nine days | More representative data does not remove access and privacy controls |
Confirm the available licences and storage for the actual organization. Refresh intervals describe platform capability, not a recommendation to copy production data unnecessarily. Salesforce sandbox types
Warehouse models and CI
Build candidate models in a separate schema and run the cases that exercise their real business logic. dbt platform CI builds and tests changed assets and downstream dependencies in a PR-specific schema. It normally removes that schema on closure or merge, but custom schema-name behavior can affect cleanup. dbt continuous integration
dbt unit tests use static inputs to test SQL-model logic before full materialization and are intended for development or CI. They are available from dbt v1.8, with current engine and adapter requirements to check. Data tests query actual resources for failing rows. Neither type proves that an incomplete source extract contains every expected business record. dbt unit tests, dbt data tests
Teams operating their own dbt runtime need an equivalent isolated workflow rather than assuming the platform's PR automation exists automatically. Use the dbt implementation checks for incremental and full-refresh comparisons.
When no full sandbox exists
Use a deliberately restricted pilot only where the proposed change can be bounded safely: controlled records, suppressed outbound messaging, an isolated model and a tested recovery path. A low-volume test is still a real action if it reaches customers or overwrites production fields.
If a mass workflow, migration or integration cannot be isolated sufficiently, establish the needed test environment before release. A missing sandbox is not evidence that a risky change is acceptable to test broadly in production.
Which twelve cases catch failures across the whole journey?
Use the cases below for a hypothetical demo-request launch, adapting the expected behavior to the actual contract. They test a thirty-person B2B SaaS workflow from accepted form submission to CRM handoff, warehouse model and reporting.
The candidate path sends permitted acquisition events, creates or updates a HubSpot contact, routes the request, loads the relevant data into BigQuery and builds a dbt request model. Customer permissions and business-record processing have separate purposes; not every valid request must be sent to every advertising destination.
Source, tracking and delivery cases
| Case | Required outcome | Evidence | Blocking consequence if wrong |
|---|---|---|---|
| 1. Valid new request | One accepted submission reaches its intended records and permitted destinations | Source receipt, payload, CRM record and model row | Lost or incorrectly counted lead |
| 2. Existing contact requests a demo | Reuse the contact while recording the new request and preserving owned fields | Stable contact ID and separate submission ID | Duplicate customer or damaged ownership |
| 3. Analytics or advertising permission denied | Business processing follows its approved purpose; each optional route follows its permission rule | Consent state plus browser and server requests | Disallowed collection or incorrect routing |
| 4. Double click on submit | One business request under the approved duplicate rule | Submission key and both delivery traces | Duplicate conversion, task or report row |
| 5. Validation failure | No accepted-request outcome is manufactured | Form/backend rejection and downstream absence | Invalid lead or inflated conversion |
| 6. Timeout followed by retry | Reconcile uncertain delivery and preserve the same occurrence | Retry ledger and destination readback | Duplicate write or silent loss |
Do not assume adding event_id gives every destination universal deduplication. The application and integration must implement the business occurrence rule, and the destination's own semantics still apply. Use common GTM failures and automated tracking QA for the tracking-specific detail.
CRM, model and customer-treatment cases
| Case | Required outcome | Evidence | Blocking consequence if wrong |
|---|---|---|---|
| 7. Blank incoming company or source | Apply the agreed blank policy without erasing an authoritative value | Before/after property history | Loss of useful source or account context |
| 8. Primary owner unavailable | Route to the approved fallback or visible exception queue | Assignment rule and receiving person's view | Unowned request |
| 9. Required field or picklist rejected | Preserve the request in an owned failure path and retry after repair | Error record, corrected mapping and readback | Disappearing lead or repeated failure |
| 10. Ordinary sales-user access | The real role can see the request and perform its next action | UAT under that user's permissions | Admin-only success that fails in daily work |
| 11. Late warehouse arrival and report reconciliation | Preserve business time, expected grain and the correct fixed-window record set | Source IDs, model results and report comparison | Wrong period, duplicated or omitted outcome |
| 12. Suppressed or wrong-audience record | No inappropriate customer message or campaign enrollment | Eligibility decision and message log | Unwanted customer treatment |
The HubSpot rollout checklist covers its platform gates, while Salesforce implementation mistakes explains why admin-only tests hide permission failures. For messaging, use the frequency and suppression guide.
Make every expected result observable. If the evidence is unavailable, mark the case blocked or incomplete; do not mark it passed because the report total looks plausible.
How can equal totals hide a failed release?
Equal totals can conceal a missing record and a duplicate. Reconcile the expected business keys before accepting a count.
For an original synthetic example, the source accepted demo-A, demo-B and demo-C. The candidate model contains demo-A, demo-A and demo-C.
| Measure | Source | Candidate | Interpretation |
|---|---|---|---|
| Rows | 3 | 3 | The totals appear equal |
| Distinct submission IDs | 3 | 2 | One expected request is missing |
Occurrences of demo-A | 1 | 2 | One request is duplicated |
Occurrences of demo-B | 1 | 0 | A real source request has no candidate row |
The candidate has two of three expected IDs, or 66.7% observed coverage. A row-count-only assertion passes even though the business outcome fails. Keep source-only, destination-only and repeated-ID exceptions visible.
For the CRM, distinguish contacts from requests. Two requests from one existing person may correctly correspond to one contact and two request records. Comparing those counts without their grain creates a false defect.
In the hypothetical twelve-case release, suppose the double-submit case emits two generate_lead occurrences and the blank-source case overwrites an existing value. Both violate agreed requirements. Repair the occurrence control and field rule, then rerun the original cases and the related retry, existing-contact and reporting checks.
A sales request to add a required product-interest field is a different matter if it was absent from the agreed scope. Record it as a change request for the accountable owner. Do not quietly change the form during retesting and keep using the old acceptance evidence.
How should defects and change requests affect the launch decision?
Tie severity to business consequence and the agreed acceptance criteria. A defect breaks the agreement; a change request asks to alter it. Both need an owner, but they do not automatically have the same commercial or release treatment.
| Finding | Typical release response | Evidence before closure |
|---|---|---|
| Lost lead, wrong monetary value or duplicate business action | Hold affected scope | Original and related regression cases pass |
| Permission or wrong-audience failure | Keep the failing route disabled | Required control and denied cases pass |
| Ordinary user cannot complete the workflow | Hold the relevant business launch | UAT succeeds under the intended role |
| Cosmetic issue with no decision impact | Consider explicit acceptance as a known issue | Owner, consequence and repair target recorded |
| Newly requested functionality | Make a scope decision | Revised acceptance criteria before implementation |
A reporting label can be material if it causes users to mistake revenue for cash or contacts for accounts. Do not label every presentation issue harmless merely because the code runs.
Keep a known-issues list with the tested version, impact, owner, accepted scope and review trigger. Acceptance of a bounded nonblocking issue is not permission to ignore a prohibited data flow or conceal an untested critical case.
After a repair, rerun the cases that could be affected. Avoid repeating the entire test suite without a reason, but do not test only the changed line when the fix alters identifiers, permissions or shared field behavior.
How should business users run UAT?
Have representative users perform their real tasks with their actual role permissions. The builder can prepare the script and data, but the business user must determine whether the workflow is usable and the outcome is understood.
For the demo-request journey, ask a salesperson to find the new request, identify its account and source, understand the priority, take ownership and record the next step. Ask the reporting owner to explain which requests the report includes and reconcile a sample to the source.
Record questions as well as failures. If the user cannot tell whether a field is current or whether another team owns the next action, the issue may be missing context rather than a broken API. Resolve it against the intended operating job.
Use a small representative group per role, sized to the workflow's variation. A single administrator cannot represent several permission profiles, regions or business units. Schedule users early enough that availability does not become pressure to approve an untested release.
What should the sign-off record contain?
Tie acceptance to the exact scope and version that was tested, with evidence and a recovery plan for each affected system. A generic email saying “looks good” leaves too much unspecified for a connected release.
Record:
- Journeys and destinations included in the release.
- Candidate GTM version, application commit, CRM configuration and model/job reference.
- Required cases and their actual results, including blocked or inapplicable cases.
- Evidence locations and the people who executed and reviewed the work.
- Known issues accepted by the appropriate owner, with bounded consequences.
- Pause, rollback and data-reconciliation procedures for each affected path.
- Accountable signer, authorized publisher and operating owner.
- The first production-check window and escalation conditions.
HubSpot's deployment guide limits a standard-sandbox deployment to 300 changes and says a started deployment cannot be canceled. Confirm the supported assets and recovery arrangement before treating Deploy as a reversible preview action. HubSpot deployment limits
Rollback has limits in every system. Restoring a container version cannot recall a sent message or undo a CRM write automatically. Reconcile in-flight queues and actual destination state, then perform any separately authorized repair. Keep the old and new writers from running in conflict during the switch.
The tracking-governance guide handles subsequent changes, and the ownership handoff transfers the operating responsibility. A CRM and warehouse implementation should include this evidence and acceptance record as a deliverable.
What must be checked after go-live?
Verify the released configuration and a controlled production sample promptly, then compare the first useful reporting period against the agreed source population. Production can differ from staging in credentials, permissions, traffic and connected versions.
Check the first day for missing outcomes, unexpected duplicates, rejected fields, unowned work and disallowed message paths. During the first relevant reporting week, inspect freshness and reconciliation using the output's freshness agreement. The appropriate window depends on the workflow; a weekly report does not justify waiting a week to detect a customer-message defect.
Remove temporary debug settings and access, and reconcile the cleanup of synthetic records with retained test evidence. Then hand ongoing checks to the marketing data-quality monitoring process, with a named operator who can act on the alert.
Read diagram as text
- Agree journey scope definitions and acceptance cases to Run builder QA in controlled environments.
- Run builder QA in controlled environments to All blocking cases have passing evidence?.
- All blocking cases have passing evidence? to Repair defects or resolve changed scope: No.
- Repair defects or resolve changed scope to Agree journey scope definitions and acceptance cases.
- All blocking cases have passing evidence? to Users perform UAT with their own permissions: Yes.
- Users perform UAT with their own permissions to The business owner accepts the tested outcome?.
- The business owner accepts the tested outcome? to Repair defects or resolve changed scope: No.
- The business owner accepts the tested outcome? to Record exact versions known issues and recovery authority: Yes.
- Record exact versions known issues and recovery authority to Release bounded scope and inspect production evidence.
- Release bounded scope and inspect production evidence to Production matches the approved contract?.
- Production matches the approved contract? to Pause affected paths and reconcile before recovery: No.
- Pause affected paths and reconcile before recovery to Agree journey scope definitions and acceptance cases.
- Production matches the approved contract? to Hand over the monitored workflow: Yes
Checklist
- Scope is a customer journey with a named accountable owner.
- Expected events, field writes and metric grain are agreed.
- Test environments and outbound destinations are confirmed.
- Success, denial, duplicate, retry and missing-data cases are covered.
- The actual ordinary-user permissions pass UAT.
- Source and destination identities reconcile, not just totals.
- Defects and scope changes have separate decisions.
- Every required result has evidence for the candidate version.
- Known issues, pause authority and recovery procedures are recorded.
- Production acceptance and ongoing ownership are assigned.
Bring the candidate workflow and failing cases to the $99 martech audit, or request a detailed implementation scope that includes cross-system QA, user acceptance and handover evidence.
Keep reading
Browse all Martech Strategy guides
Martech StrategyMarketing Ops Documentation: Seven Records That Survive Turnover
Maintain seven martech operating records with owners, metadata exports and review triggers. Includes a runbook, decision log and practical handover test.
Jafrin Akter AloLast updated 15 min read
Martech StrategyMartech Handover Checklist: Transfer Control Without Breaking the Work
Hand over tracking, CRM, warehouse and automation safely. Map runtime identities, transfer control and prove workflows still run after old access is removed.
Jafrin Akter AloLast updated 16 min read
Martech StrategyTracking Governance: Stop Releases From Silently Breaking Your Data
Set practical tracking governance across website releases, GTM, CRM fields and dbt models. Use risk tiers, native permissions, release evidence and safe rollback.
Jafrin Akter AloLast updated 13 min read
Analytics & tracking
See the implementation scope, deliverables and acceptance checks.
Questions people ask
Can a test case pass when one system's evidence is unavailable?
Only if the agreed case does not require that evidence or an explicitly approved alternative proves the same outcome. Otherwise mark it blocked or incomplete. A successful upstream request cannot establish a downstream record, audience or report result. Record the missing evidence and its owner so the launch decision reflects what was actually checked instead of assuming the unobserved step worked.
Should a cosmetic issue always be accepted after functional tests pass?
No. Judge its effect on the business decision and customer experience. A small label error can materially misstate a monetary unit, permission choice or ownership status. A purely decorative issue may be accepted with a named owner and repair target, but the accountable reviewer should make that determination explicitly. Do not use the word cosmetic to bypass a confusing or misleading result.
What should happen if the configuration changes after UAT approval?
Assess which accepted cases the change affects and rerun the necessary checks against the new version. Preserve the earlier approval as evidence for its original candidate, not as blanket approval for later modifications. A change to credentials, field mapping, consent or a shared model can affect several journeys even when its visible diff is small. Update the release record before proceeding.
Is it enough to test an integration with a successful administrator account?
No. That proves only what the administrator and integration identity can do in that case. Test the users who must consume the result, including their field visibility, record access and allowed actions. A lead can arrive correctly but remain invisible to its salesperson. Keep technical delivery and business usability as separate acceptance results so neither hides a failure in the other.
How should a team estimate the effort for QA and UAT?
Estimate from the journeys, environments, role variants, evidence collection and likely repair cycles. Include tester availability and the time required for delayed downstream outputs to become observable. Use previous comparable releases where available, then reserve explicit time for retesting. A generic number of days is less useful than a case inventory with owners, dependencies and a clear definition of completion.
Sources

Written by
Jafrin Akter AloData Engineer and Co-founder at Martechdevs and Growth and Analytics Partners
Jafrin writes practical guides to marketing technology, customer data, analytics and AI workflows. Martechdevs is a Growth and Analytics Partners company.