← SkillSafe / Apex Desk

Your Apex trigger, measured against a batch of 200 — before the data load finds out

Paste the trigger, the handler and service classes it calls, and the test class if you have one. A real Apex reader runs first in your browser: it masks comments and strings, brace-matches every loop, and parses every SOQL statement — so the query sitting inside your for (Account a : Trigger.new) is counted as 200 queries, not as one.

Both examples ship with saved model runs, so you can walk every lane — including the rewritten Apex and the generated test class — without signing in and without spending a credit.

nothing pasted yet
Drag .cls, .trigger, .apex or .xml files in, or or a whole force-app folder Everything is read in your browser. Nothing uploads until you run a lane.
Paste some Apex to price the run.

What this does, and what it does not

The prescan is a real reader of Apex, not a keyword search. Comments and string literals are masked before anything is matched, so // update accs in a comment is not counted as DML and the word insert inside a string is not either. Every for, while and do body is brace-matched, so "inside a loop" is a fact about the source rather than an indentation guess — and a brace-less single-statement loop is bounded by its semicolon like the compiler does it. Every SOQL statement is parsed into its object, field list, WHERE fields, LIMIT, ORDER BY and security clause, then judged selective, risky or unbounded with the reasons named; a negative operator is called out even on an indexed field, because != cannot use an index at all. A Database.query(q) whose argument is a bare variable is resolved back through the assignments to q in the same class, so a query assembled by concatenation three lines earlier is judged on how it was actually built.

The governor budget is a projection and says so. A statement outside a loop costs one; a statement in the batch loop costs one per record at the batch size you chose; a statement in a nested loop is projected at ten child rows per parent, which is an assumption printed in the table rather than a number invented behind it. Row counts and CPU time depend on org data the browser cannot see, and are reported as unknown rather than guessed.

It reads; it never deploys, never runs anonymous Apex, never executes a test and never contacts a Salesforce org. Everything the model is told about your code comes from that prescan, and every flag the prescan raised has to come back reconciled — if the model skips one, this page says so. A hardcoded Id or a token you paste is a value you should rotate: the review is told to name it rather than repeat it.

Nothing to hand? Load , with SOQL and DML inside the loop, a concatenated dynamic query and a hardcoded OwnerId, or , properly bulkified but reading every Entitlement in the org on every insert. Both replay saved runs for free.