Everything below reflects the current release (v1.1.0). From install to knowing exactly where your Elementor CSS is heavy is about ten minutes of your attention.
You need WordPress 6.0+ on PHP 7.4+, Elementor active (free or Pro, any recent version), an administrator login, and the plugin zip plus licence key from your purchase email. One honest note: the scan reads what Elementor has written to disk — on a site whose CSS was just cleared (plugin activations and some setting changes do this automatically), visit your key pages first so the stylesheets exist to be measured.
Go to Plugins → Add New → Upload Plugin, choose the zip from your purchase email, install and activate. It adds a CSS Optimizer item to the admin menu. It needs Elementor active — without it you just get a polite notice, because there'd be nothing to analyse.
Open CSS Optimizer → Licence and paste the key from your purchase email into the licence box — it's a long code starting VPC1., so paste the whole thing into the textarea rather than typing it. Keys are domain-based — no account, no phoning home.
Press Run first scan on the Overview tab. The scanner reads every stylesheet Elementor has generated plus the custom CSS stored in your page data — read-only, nothing is edited. On most sites it takes a few seconds; published and private pages are included by default, drafts optionally via Settings.
The dial gives you 0–100 — Lean, Room to trim, Heavy or Bloated — built from page weights, repeated blocks, custom CSS, delivery and orphans. Below it, findings are ranked by severity with an edit page link on each. Start at the top; the high-severity ones carry most of the weight.
Pages ranks every page by generated CSS with rules, repeats, custom CSS and delivery status — expand a row to see its repeated blocks. Custom CSS is every block in one table with duplicates marked ×N. Site-wide (Pro) holds the cross-page analysis and the housekeeping actions.
In Settings, set your report name, logo URL, accent colour and footer note. Branded report opens the print-ready A4 view; Download PDF produces a true PDF file — both carry your branding, not ours.
The behaviours and safeguards you'll actually live with.
It starts at 100 and loses points for what the scan actually found: bloated pages, wasted repeated bytes, duplicated custom CSS, inline delivery, orphans, heavy !important use. It's deliberately hard to game — the only way to move it is to fix the causes, then re-scan.
A repeated block is the same normalised declaration set under several selectors. The durable fix: style one widget, save it as a global class (or move the styling into kit styles), then apply that class to the rest. Elementor then emits the rules once. The finding shows a sample selector so you can locate the widgets.
Every element-level and page-level block, with size and flags: ×N duplicate (same block pasted repeatedly — keep one copy, ideally in the site kit), empty (left-over blocks, safe to delete), no “selector” (hard-coded rules that apply site-wide from wherever they're pasted — scope them with Elementor's selector keyword or move them to the kit).
Flagged when Elementor stored a page's CSS with inline status — usually an uploads-folder permissions problem. Fix the permissions, re-save the page, re-scan. If the site-wide warning says the CSS Print Method is “internal”, that's a setting (Elementor → Settings → Performance), not a fault — switch it to External File unless something specific needs internal.
The Site-wide tab lists identical blocks shipped on two or more pages — copy counts, the exact pages, wasted bytes, biggest first — and custom CSS pasted across pages. These are your global-class candidates, pre-ranked by what they'll save.
Orphans are post-*.css files whose post is deleted, binned or no longer built with Elementor. The scan lists them; the delete button re-verifies each file is still orphaned at delete time before removing it. Elementor regenerates any stylesheet it actually needs, so this is disk hygiene, not risk.
After consolidating, press Regenerate CSS — it calls Elementor's own files manager, the same as its Regenerate CSS tool. Files rebuild as pages are next viewed, so visit your key pages, then re-scan to measure the before/after honestly. Note Elementor also clears its CSS automatically when plugins are activated or settings change; a scan straight after that will show small numbers until pages have been viewed again.
The report carries the score, executive summary, findings, cross-page groups and the heaviest-pages table, under your branding. The PDF is a true file download; the report view also prints cleanly to PDF from the browser. Both are snapshots of the last scan — re-scan first if you've changed things.
It never edits pages, widgets or Elementor data; never rewrites, minifies or strips CSS; never phones home. The only writes in the product are the two Pro housekeeping actions — orphan deletion and regeneration via Elementor's own machinery — both explicit button presses.
Every scan stores a snapshot. The Overview shows the score curve and the change since the previous scan; the report gains a trend table — so a clean-up pass ends with evidence, not a feeling. History survives in its own table and is capped, so it never bloats.
The Site-wide tab lists duplicated custom CSS blocks that are provably safe to merge — no copy uses the selector keyword. One button moves one copy into the site kit, removes the element copies and regenerates the stylesheets. A full undo snapshot is taken first and restores byte-for-byte.
Turn it on in Settings with one or more recipients: a weekly scan emails the score, its change and the top findings. It runs on WP-Cron with a self-healing schedule, and the “Send digest now” button works on hosts where cron never fires.
wp eco scan --json runs a scan from the shell and prints machine-readable results; wp eco score --json reads the stored scan. Exit codes are honest, so a deploy pipeline can gate on the score.
One textarea, one Save button. Paste the full VPC1.… key from your purchase email. The key covers the number of sites on your plan; move a site by deactivating on one and activating on another. Unlicensed, the free diagnosis keeps working — Pro features pause with a notice, never a breakage.