technical due diligence checklist · 25 checks · code only

The 25 things to check in the code before you buy a SaaS

This is a code-only SaaS due diligence checklist for buyers who cannot read a repository. It does not cover revenue, churn, contracts, tax, or valuation.

Each check tells you what can go wrong, what to look for, how to check it yourself where possible, and whether Ascertify verifies it from the repository. Fifteen of the 25 are fully automated. Nine need something only the seller can give you. One is on the roadmap and marked as such.

If you are buying through Flippa or Acquire.com, use their broader acquisition guidance for the rest of the deal. This page deliberately goes narrower: these are the checks for the code you are about to inherit.

What does a technical due diligence checklist cover that a financial one doesn't?

Financial diligence can tell you whether customers pay. It cannot tell you whether the product depends on a leaked API key, whether users can access each other's data, whether somebody else can rebuild and deploy the code, or whether the seller is the only person who knows how the product stays alive.

That matters because the repository is part of what you are buying. Healthy MRR does not make unsafe database rules, abandoned dependencies, disputed code ownership, or undocumented deployment steps disappear.

Use this checklist after you receive repository access and before the inspection period closes. For the wider process, see micro-SaaS due diligence, technical due diligence for non-technical buyers, and what technical due diligence costs.

Secrets and credentials: 5 checks

Removing a secret from the current file does not make an exposed credential safe. It is still in the history, and anyone with the repository can read it. GitHub's own guidance is to rotate a leaked credential rather than treat deletion as remediation.

01

Are API keys or passwords hardcoded in the repository?

look for

Stripe keys, AI provider keys, database passwords, tokens, private keys, or signing secrets committed directly in source files.

check yourself
Search for API_KEY, SECRET, TOKEN, PASSWORD, PRIVATE_KEY, .env, and provider names. A match is not automatically a leak. An actual credential value is.
ascertify
Automated
02

Were secrets committed in older Git history?

look for

Credentials removed from today's code but still present in an earlier commit.

check yourself
Ask the seller to run gitleaks or trufflehogagainst the full history and share the output. Both are free. Do not ask for GitHub secret-scanning results; on private repositories that is a paid feature most solo founders do not have. “We deleted it” is not sufficient. Exposed production credentials should have been rotated.
ascertify
Automatedwhen full repository history is available.
03

Are development and production secrets separated?

look for

The same credentials being used across local development, staging, testing, and production.

check yourself
Ask for production environment-variable names, not their values, and verify that the project clearly separates environments.
ascertify
PartialRepository configuration can be inspected; external secret stores cannot.
04

Are privileged keys exposed to browser code?

look for

Service-role keys, admin SDK credentials, private signing keys, database connection strings, or unrestricted provider keys inside frontend code, or any variable prefixed for the browser (NEXT_PUBLIC_, VITE_) whose name contains “secret” or “private”.

check yourself
Search client-side folders and build configuration for admin or service credentials.
ascertify
Automatedfor recognizable patterns.
05

Can every production credential be transferred and rotated?

look for

Keys tied to the seller's personal account, an agency account, or a developer who is leaving after the sale.

check yourself
Ask for the external-service inventory and account owner for each service. Confirm new credentials can be generated after closing.
ascertify
PartialReferenced services can be identified; account ownership requires seller evidence.

Database and auth rules: 3 checks

Authentication answers “who are you?” Authorization answers “what are you allowed to access?” The second one is where ugly acquisition surprises hide.

OWASP recommends denying access by default and validating permissions on every request. Supabase similarly requires appropriate grants and row-level security for exposed database tables.

This is not theoretical. In the research behind CVE-2025-48757, 170 of 1,645 analyzed Lovable projects, about 10.3%, exposed affected database endpoints. Researchers reported 303 vulnerable endpoints. The CVE describes insufficient row-level security allowing unauthenticated access to generated sites' database tables.

06

Can one user read or change another user's data?

look for

Authentication that works, but authorization that fails between users, accounts, or workspaces.

check yourself
Ask the seller to use two test accounts. Change a record ID, account ID, workspace ID, or API request and verify that one account cannot reach the other's data.
ascertify
PartialStatic access-control mistakes can be identified; live behavior still needs runtime verification.
07

Are database security rules actually present?

look for

Missing or overly permissive Firebase rules, Supabase RLS policies, database grants, or backend authorization middleware. Note that RLS enabled with no policies on a table behaves the same as RLS disabled.

check yourself
Ask where authorization is enforced. “Users cannot see that page unless they log in” is not an answer. The underlying request must be protected.
ascertify
Automatedwhen the rules are stored in the repository.
08

Are file uploads and storage buckets protected too?

look for

Private invoices, exports, identity documents, attachments, or customer uploads stored in publicly readable buckets.

check yourself
Ask which uploads are intentionally public. Private files should require authorization, not merely an obscure URL.
ascertify
Partialwhen storage rules or access code are present in the repository.

Tests, buildability and maintainability: 5 checks

A repository is not transferable just because it worked on the seller's laptop. You want evidence that another person can install, build, test, deploy, and change it predictably.

09

Does an automated test suite exist?

look for

Test folders, test scripts, CI test steps, and unit, integration, or end-to-end tests.

check yourself
Search for tests, __tests__, spec, e2e, and scripts named test, test:unit, or similar.
ascertify
Automated
10

Do the tests cover the paths that matter?

look for

Tests around signup, billing, permissions, and the core paid workflow, not fifty tests for formatting helpers.

check yourself
Ask which tests fail if checkout, authentication, subscriptions, or the product's main action breaks. Then verify those tests exist.
ascertify
PartialTest presence and count are automated; whether they cover the right business paths is not.
11

Is there a reproducible install and build path?

look for

A committed lockfile that has been maintained alongside the manifests, plus clear install and build scripts. A lockfile that stopped changing while package.json kept changing is a warning sign.

npm documents that package-lock.json records the exact dependency tree so later installs reproduce it rather than silently pulling different versions.

check yourself
Find package-lock.json, pnpm-lock.yaml, yarn.lock, poetry.lock, or the equivalent for the stack, and compare its last change date with the manifest's.
ascertify
Automatedfor repository evidence.
12

Are environment setup and deployment documented?

look for

README instructions, environment-variable examples, migrations, infrastructure configuration, CI workflows, deployment steps, and rollback guidance.

check yourself
Ask a useful question: could a new developer deploy this without phoning the founder?
ascertify
Automatedfor documentation and configuration presence.
13

Will a new developer be able to change this without breaking it?

look for

Six signals, none of which need a score. No tests (already covered above). Files over a few hundred lines. The same logic duplicated in several places. TypeScript with any everywhere. Dependencies with no release in two or more years. A git history that shows a dump rather than development.

check yourself
Sort the source folder by file size and open the largest file. If you cannot tell what it does from the first screen, neither will the next developer. For the rest, see can you maintain this codebase.
ascertify
AutomatedEach signal is reported as a count with file and line, not as a grade.

Dependencies and licensing: 5 checks

Most SaaS products contain far more third-party code than code written by the seller. GitHub builds its dependency graph from manifests and lockfiles, while SPDX exists specifically to represent software components, provenance, licensing, and security information.

14

Do all declared packages actually exist?

look for

Packages in the manifest that are not on the registry, or that exist but were published after the code that imports them. AI coding tools invent plausible package names, and squatters register those names with malicious code. Also look for imports in the source that no declared package provides.

check yourself
For each unfamiliar package, open its page on npmjs.com. Check the publish date, download count, and whether the maintainer has anything else. A package created last month with one version and no repository link is not a dependency, it is a liability.
ascertify
Automated
15

Are there known vulnerable dependencies?

look for

Security advisories affecting packages that actually ship in production.

check yourself
Review Dependabot, GitHub Advisory Database, npm audit, Snyk, or equivalent results. Prioritize exploitable production dependencies over the raw number of alerts.
ascertify
Automated
16

Is the product pinned to obsolete or unsupported frameworks?

look for

Deprecated runtimes, abandoned frameworks, unsupported major versions, or SDKs that no longer receive fixes.

check yourself
Identify the main framework, runtime, database SDK, and payment SDK. Confirm the versions are still supported upstream.
ascertify
Automatedfor the stacks Ascertify targets: Node, Next.js, React, Supabase and Firebase SDKs, Prisma.
17

Do dependency licenses fit a commercial SaaS?

look for

Copyleft, source-available, custom, unknown, or commercial licenses with obligations the seller may have ignored.

Open-source software can carry conditions even when it is free to use, so “it's open source” is not the end of the licensing check.

check yourself
Ask for an SBOM or dependency-license report. Send unusual licenses to legal review.
ascertify
RoadmapNot in the current report.
18

Does the code depend on private forks or abandoned packages?

look for

Git URLs, local paths, personal forks, private registries, and packages with no credible maintenance path.

check yourself
Inspect dependency files for nonstandard sources and ask why each one exists.
ascertify
Automatedfor dependency-source detection; maintenance risk may require review.

Git history and authorship: 4 checks

Git history is not decoration. It shows how the product evolved, who worked on it, and whether you received a maintained repository or a ZIP file wearing a GitHub costume.

19

Is there real development history?

look for

Incremental feature work, fixes, releases, refactors, and normal changes over time.

check yourself
A single giant initial commit for a supposedly mature SaaS deserves an explanation. One legitimate explanation exists: Lovable syncs projects to GitHub in bulk, so a Lovable-built app can have a real development history inside Lovable and a single-dump history on GitHub. Ask which tool built it before drawing conclusions.
ascertify
Automatedwith the Lovable sync pattern detected and the finding reframed rather than reported as a warning.
20

Who wrote most of the code?

look for

Heavy concentration of commits or code contribution in one person.

GitHub's contributor graph exposes the repository's top contributors, which gives a buyer a straightforward first view of authorship concentration.

check yourself
Compare contribution concentration, not merely the number of usernames.
ascertify
Automated
21

Do all material contributors have a clear relationship to the seller?

look for

Major Git contributors who are not explained by employee, contractor, or cofounder records.

check yourself
Match significant authors to IP-assignment records. Git can show who contributed code. It cannot prove that the seller owns their rights to it.
ascertify
PartialContributor evidence is automated; ownership documents are not.
22

Was the repository reconstructed just before the sale?

look for

A recently created repository containing old code, missing history, or dates that do not match the seller's story.

check yourself
Compare repository creation date, earliest commits, releases, deployment history, and product age.
ascertify
Automatedhistory and timeline anomaly checks.

Bus factor and handover: 3 checks

A technically decent product can still be a terrible acquisition if one person is required to keep it alive.

Current Flippa SaaS buying guidance explicitly tells buyers to focus on transferability and founder dependency. Acquire.com's technical diligence guidance similarly examines who is behind the software and who owns the code.

23

Can another developer set the product up from the repository?

look for

Hidden prerequisites, undocumented migrations, missing environment details, or setup steps known only to the seller.

check yourself
Give the README to someone who did not build the product. Is it enough to understand how the application is set up?
ascertify
PartialRepository evidence can be evaluated; the future maintainer cannot.
24

Are recurring operational jobs encoded or just remembered?

look for

Manual imports, cron jobs, backup routines, certificate renewal, queue restarts, billing tasks, or cleanup that lives in the founder's head.

check yourself
Ask: “What do you do manually every week or month to keep this running?” Then verify each answer appears in code or handover documentation.
ascertify
PartialScheduled jobs and operational scripts in the repository can be identified.
25

Can every critical external service survive the ownership transfer?

look for

Personal GitHub apps, cloud projects, OAuth clients, domains, Stripe webhooks, email services, analytics accounts, or AI services that cannot simply move with the source code.

check yourself
For each referenced service, record the owner, billing account, transfer method, credential rotation process, and what breaks if access disappears.
ascertify
PartialReferenced services can be surfaced; transferability requires seller confirmation.

Which of these can you check yourself?

A non-technical buyer can do a useful first pass without reading application code.

Start with what GitHub makes visible: commit history, contributors, test folders, README files, lockfiles, dependency alerts, configuration files, and the largest source files. Then ask the seller to demonstrate authorization with two accounts and provide an inventory of production services.

The harder questions are the ones where intent or live behavior matters: whether authorization rules are correct, whether tests cover the right business paths, whether a dependency is dangerous in context, and whether operational knowledge exists outside the repository.

That is the difference between a checklist and an audit.

The checklist tells you where to look. Ascertify runs the 15 automated checks against the repository and turns the findings into buyer-facing evidence, every one anchored to a file and a line, for $49. It reads the code and never executes it, and it does not pretend the seller's production environment can be inferred from source.

Run the 15 automated checks - $49

FAQ

What should I check in the code before buying a SaaS?

Check six areas: secrets and credentials, database and authorization rules, tests and maintainability, dependencies and licenses, Git history and authorship, and bus factor and handover.

The 25 checks above cover those areas without requiring you to judge code quality line by line.

Do I need a developer for technical due diligence on a small SaaS acquisition?

Not for every check.

A non-technical buyer can verify repository history, contributor concentration, documentation, tests, lockfiles, dependency alerts, file sizes, and many exposed-secret signals. Bring in a developer or specialist when a finding depends on runtime behavior, architecture, security intent, or remediation cost.

What is the difference between a SaaS due diligence checklist and a code due diligence checklist?

A SaaS due diligence checklist covers the business: revenue, customers, legal, operations, technology, and transfer.

A code due diligence checklist covers the software asset itself: repository history, security configuration, dependencies, tests, licenses, authorship, and handover evidence.

Is this a Flippa technical checklist or an Acquire.com technical checklist?

It works for a deal found on either marketplace, but it is not affiliated with Flippa or Acquire.com.

Their guides cover the wider acquisition. This checklist is intentionally code-only so you can use it beside a listing, data room, or repository.

Can AI perform technical due diligence on a SaaS codebase?

AI can assist, but useful findings should resolve to concrete evidence: a file, dependency, rule, commit, credential pattern, or configuration.

Live authorization, production infrastructure, account ownership, and seller handover claims still need external verification.

How long should technical due diligence take before buying a SaaS?

For a deal under $50,000 with repository access, one working day is enough for the repository checks on this list, and most of the automated ones take minutes. Budget a second day for the seller conversations in the Partial items. Larger deals, customer data, or heavy founder dependency justify more.

Treat any critical security, code-ownership, or transferability finding as a reason to investigate before the inspection period closes.

Keep the printable version next to the listing

Use the one-page version during the repository review, then return here when a failed check needs explanation.

Or skip the manual repository pass:

Independent service. Not affiliated with Acquire.com, Flippa, TrustMRR or any other marketplace.