Per-scan pricing · No subscriptions

Audit your Frappe custom apps. Before they break in production.

Catch security holes, slow queries, and Frappe upgrade blockers before your customers do. Every finding ships with the file, line, and a Frappe-native fix.

Every paid scan ships with a free 30-min debugging call with our senior developers.

v14 → v16 compatibility GitHub & zip upload 30-min call included
Dashboard
Code audits
4 repositories · 124 findings this week
+ New scan
bank_api_integration
18 findings
india-banking
scanning
pwa-builder
9 findings
reconciler
27 findings
Every audit, at a glance. Repos you've scanned, health grades, open findings.
The problem

Frappe gives you power. Custom apps quietly accumulate risk.

Every custom DocType, hook, and server script is a bet. Most teams only find out which ones didn't pay off when migration day, a slow query, or a permission leak makes it obvious.

01

Silent performance debt

N+1 queries hidden inside frappe.get_all loops, missing indexes, cache-busting patterns. Invisible until a customer complains.

02

Security written by habit

Raw SQL built with string formatting, ignore_permissions=True sprinkled for convenience, unvalidated whitelisted methods.

03

Upgrades that stall

Renamed APIs, deprecated hooks, changed signatures. You only see them when bench migrate fails at 2am.

Version compatibility check

Know if your app survives the next upgrade, before you start it.

Pick the version you're on and the one you're going to. We pull the real diffs from GitHub, run them against your app, and return a compatibility score with the exact files that need edits.

CURRENT
v14
TARGET
v16
RESULT
92%
4 edits needed
API MOVED

frappe.utils.data.get_datetime

3 call sites in custom_app/utils.py

SIGNATURE CHANGED

Document.validate hook

1 override in sales_invoice.py

REMOVED

frappe.utils.scheduler.connect

Replace with the new scheduler events in hooks.py

Supported versions

Every Frappe and ERPNext line your custom app might touch.

New versions are added shortly after release. Our compatibility matrix covers every supported transition, forward and sideways.

Frappe v14Full scan + compatibility to v15 / v16Supported
Frappe v15Full scan + compatibility to v16Supported
Frappe v16Latest, default targetSupported
ERPNext 14 – 16Convention rules tracked per minorSupported
Code Audit

Audit your custom app to maintain Frappe and ERPNext best practices.

Every scan checks your code against real Frappe and ERPNext conventions and scores it across the dimensions that matter. Each finding points to the exact line that breaks a best practice, with the Frappe-native pattern to use instead. Not generic linting.

Five scored breakdowns, not a single vague grade

Performance, Security, Code Quality, Framework Fitness, and ERPNext Conventions. Each scored independently so you know exactly where to invest.

60
Performance
73
Security
84
Code Quality
70
Framework Fit
79
ERPNext

Severity, not noise

Findings tiered Critical, Warning, Info, so the top of the list is the stuff that ships tonight.

Pinpoint locations

Every issue links to path/file.py:L42. Click, fix, re-scan.

Design suggestions

Not just “this is wrong”. A Frappe-native pattern to replace it with.

Stakeholder summary

A one-page read for the CTO with scores and next steps. The detail, with anchor links, for the dev.

GitHub repo or zip upload

Paste a URL or drop a zip. Public or private, read-only scope, ephemeral workers, no clones left on disk.

Framework-aware, not a generic linter

53 rules written against real Frappe idioms: permissions, hooks, child tables, whitelisted methods, DocType lifecycle, hook overrides.

The report

Findings you can act on the same day you get them.

custom_app · main
scan #4821 · 8m 12s · 214 files
Code Audit
7
Critical
23
Warning
41
Info
71
Total
CriticalSQL injection via string formatting

Use parameterised queries with frappe.db.sql(query, values). String interpolation on user input is exploitable.

custom_app/api/invoice.py:142
# found
return frappe.db.sql(f"SELECT * FROM tabCustomer WHERE name='{name}'")
WarningN+1 inside loop on get_all

Replace per-row frappe.get_doc with a single frappe.get_all + fields=[...] or pluck.

custom_app/report/sales_summary.py:58
InfoHook uses deprecated signature

on_update handler takes (doc, method) in v15+. The single-arg form is removed in v16.

custom_app/hooks.py:96

Every finding, explained like a senior reviewer wrote it.

Not a dump of rule IDs. A plain-English diagnosis, a link to the line, and the Frappe-native pattern to replace it with. Plus a stakeholder summary up top for the people who aren't shipping the fix themselves.

  • Severity tiers. Critical, Warning, Info, sorted so the top of the page is the next thing to fix.
  • Exact location. File, line, and the offending snippet. One click from your editor.
  • Framework-native suggestions. The replacement pattern Frappe already gives you.
  • PDF + HTML export. Share with the team, keep one for the audit trail.
How it works

From repo URL to actionable report in four steps.

STEP 01

Connect your repo

Sign in with GitHub or upload a zip. Private repos supported, read-only scope.

STEP 02

Pick audit categories

Performance, Security, Code Quality, Framework Fitness, ERPNext Conventions. Turn each on or off before you scan.

STEP 03

Watch the scan run

Typical custom app finishes in 5–15 minutes. Live progress, email when it's ready.

STEP 04

Read the report, fix the lines

Findings linked to exact file:line with a fix hint, a Frappe-native alternative, and a stakeholder summary.

Dashboard › New audit

New audit

Paste a public GitHub URL, or connect your account for private repos.

https://
main
Team

The engineers behind Lens.

Active contributors to Frappe and ERPNext at Aerele Technologies. The code that already runs your ERPNext.

0+
merged PRs
0
active contributors
Ravibharathi avatar

Ravibharathi

98 PRs111 commits

Accounts and payments specialist. Deep work on payment reconciliation, exchange rate handling, POS, bank transactions, and GL entries.

Venkatesh avatar

Venkatesh

90 PRs127 commits

Core accounting and payroll contributor. Extensive fixes across payment entries, tax withholding, period closing vouchers, cost center allocation, and multi-currency handling.

Logesh Periyasamy avatar

Logesh Periyasamy

63 PRs90 commits

Accounting reports and ledger expert. Built features like company currency display in GL reports, cashflow opening/closing balance, and accounting dimension filters.

Kavin avatar

Kavin

57 PRs68 commits

Stock and manufacturing specialist. Focused on serial/batch handling, pick lists, POS batch calculations, subcontracting, and work order validations.

Sudharsanan Ashok avatar

Sudharsanan Ashok

52 PRs78 commits

Manufacturing and stock operations contributor. Work across production plans, work orders, batch quantity calculations, subcontracting orders, and stock reservations.

NaviN avatar

NaviN

35 PRs59 commits

Asset management and financial reporting contributor. Key work on asset depreciation, capitalization, partial asset sales, and gross profit reporting.

Pugazhendhi Velu avatar

Pugazhendhi Velu

33 PRs55 commits

Full-stack ERPNext contributor across stock, manufacturing, and framework. Fixes in barcode scanning, warehouse handling, period closing, and quality inspection.

Pandiyan P avatar

Pandiyan P

26 PRs31 commits

Stock and manufacturing contributor. Focused on warehouse mapping, barcode scanning, UOM handling, and work order improvements.

Bhavansathru avatar

Bhavansathru

25 PRs33 commits

Broadest ecosystem coverage, contributed across six repos including frappe, erpnext, payments, webshop, ecommerce_integrations, and frappe_docker. Key work on payment reconciliation, budget management, bank reconciliation, and inter-company transactions.

Nareshkanna S avatar

Nareshkanna S

25 PRs41 commits

HRMS specialist. Contributions across expense claims, salary structure, leave management, gratuity, and attendance.

Sowmya avatar

Sowmya

23 PRs45 commits

Versatile contributor across selling, assets, and accounts. Built features like configurable asset depreciation notifications, attendance permissions, and default age ranges in accounts.

Vishnu Priya Baskaran avatar

Vishnu Priya Baskaran

17 PRs22 commits

Accounts and ecommerce contributor. Fixes in payment requests, budget variance reporting, bank reconciliation, and Bootstrap layout handling.

Karuppasamy avatar

Karuppasamy

13 PRs18 commits

Contributed across accounts, payments, and integrations. Built MT940 bank statement import, pegged currency support, and Razorpay currency extensions.

Rethik M avatar

Rethik M

9 PRs22 commits

Accounts and stock contributor. Built multiselect CC in process statement of accounts, difference posting date for invoice advances.

Dhinesh avatar

Dhinesh

6 PRs6 commits

Focused contributions on pricing and bank reconciliation. Fixes in pricing rule application, discount handling, currency updates, and the bank reconciliation tool.

Sudarshan avatar

Sudarshan

6 PRs7 commits

HRMS and accounts contributor. Fixes in holiday list handling, asset depreciation schedules, GL entry currency, and translation improvements for link fields.

Chethan Kumar C avatar

Chethan Kumar C

1 PRs1 commits

Contributed to ERPNext accounting setup with print and stationery account renaming.

Pricing

Pay per scan. Priced by the size of your codebase.

No subscriptions. Pay per scan. Pick the tier your repo falls into. Every paid scan includes a 30-min debugging call with our senior ERPNext developers.

What every paid scan includes
Findings report
PDF + HTML, severity-tiered, line-precise. Shareable with stakeholders.
Free with every paid scan
30-min debugging call
With a senior ERPNext developer. Walk through findings, ask doubts, plan next steps.
Opt-in add-on
Architecture review
Deep review of structural patterns, coupling, and overrides. Adds a few minutes to the scan.
Version compatibility check
Migration-ready check

Pick two Frappe versions. We pull the real diffs from GitHub, run them against your app, and return a compatibility score with the exact fixes, plus a 30-min debugging call with our senior ERPNext developers to plan the migration.

Tier
Size cap
Price
Standard
≤ 25K LOC
₹5,999
Pro
≤ 75K LOC
₹9,999
Max
≤ 125K LOC
₹14,999
Enterprise
> 125K LOC

Prices shown in INR (₹), inclusive of applicable GST. Tiers are determined by both total lines-of-code and file count. We quote before you pay.
The 30-min debugging call is included with every paid scan and is scoped to that scan. Walk through the findings, ask doubts, plan next steps. Calls are scheduled after your scan completes; we pair you with the engineer best suited to your app's stack.
Need a deeper refactor or full migration help? Talk to Aerele.

FAQ

Questions teams ask before their first scan.

Do you store my source code?
No. We clone to ephemeral workers, scan, emit the report, and delete. The only thing we retain is the findings metadata tied to your scan ID. Never the source.
How long does a typical scan take?
5 to 15 minutes for a typical custom app. Larger codebases take proportionally longer. We run the deterministic pass first, then deep validation on what's worth validating, so you aren't waiting on noise.
Which GitHub permissions do you request?
Read-only on the repositories you explicitly grant. No write, no admin. If you'd rather not connect GitHub, upload a zip. Fully supported.
Is this an official Frappe product?
No. Lens is built by Aerele Technologies - an independent developer-only team of active contributors to the Frappe / ERPNext ecosystem.
Do you support versions older than Frappe v14?
v14 is the oldest line we actively rule-match. Version compatibility checks only go forward from v14 onwards; older apps will still scan but with reduced coverage.
How is pricing calculated?
Per scan, by the size of your codebase: total lines of code and file count. We pre-scan your repo and show you the exact tier and price before you commit. No subscriptions, no surprise usage bills.

Audit your first custom app in minutes.

Plain-English findings, every line located, plus a stakeholder summary for the people who sign off. Pay only for the scan you run.