PaintClarity

Disgrifiad

PaintClarity turns your WordPress site into the back office for your painting business. (PaintClarity was formerly known as PaintOps. Same plugin, same team, same data.) Build professional quotes, send them to customers who can view, e-sign, and pay a deposit online, schedule crews on a calendar, track every job from request to invoice to payment, and, on Pro, see your real profit per job, per crew, and per worker.

It was built by a painter, for painters. The quote builder understands painting scope: interior/exterior components, standard inclusions and exclusions, and the disclaimer language that keeps you out of disputes. Your data lives in your own WordPress database, not locked inside someone else’s SaaS, and the free plugin is a complete system on its own.

Quote to invoice, start to finish

  • Quotes, estimates & bids: a scope-aware builder with reusable inclusions/exclusions, itemized or lump-sum pricing, trade calculators that add their numbers straight to the quote, printable output, and email delivery. Preview Online Quote shows you exactly what the customer will see before you send it.
  • A professional customer page: your customer opens a clean, branded page (your logo, your terms & conditions) and accepts by typing their name, an e-signature-grade record with timestamp. They can also decline with a reason, or ask a question, and you’re notified either way. You see when the quote was viewed.
  • Acceptance converts the quote to a job automatically, whether they paid a deposit online or you shook hands, and a “Mark as Won” button covers the phone call.
  • Invoices: numbered invoices for the balance (full or partial), emailed or shared by link, payable online (Pro + Stripe) or marked paid for check/cash. Invoicing more than the job is billing asks first, so a number never slips past you.
  • Payments: every job has a Payments page. Record cash, check, or in-person card payments and refunds, and see Billed, Paid, and Still Owed at a glance. A payment flips the matching invoice to paid, so balances always agree.
  • Sales tax, one or two: a default rate plus any number of additional rates, each stamped on the job when it is created so a later rate change never rewrites old paperwork. Provinces that charge GST and PST (or GST and QST) on the same work can enter both, and quotes and invoices print each tax on its own line.
  • Communication History: every email the plugin sent, every call or text link tapped, and every conversation you logged by hand, in one place per job, each marked by how much it can be trusted: sent by PaintClarity, link opened, or recorded by hand.
  • Receivables at a glance: unpaid invoices surface on your dashboard with amounts and age, and a quote that has gone quiet shows up under Needs Your Attention with a one-tap follow-up email or text.
  • Request Performance: how often your quotes turn into jobs, counted per job rather than per revision, so three rounds of edits before a yes count as one win, not two losses.

Running the work

  • Jobs, two ways: a row view with Requests, Upcoming, Active, and Completed sections (unpaid balances right on the Completed section), and a board / pipeline view, Quote Active Completed, plus a lost-leads drawer with the customer’s decline reason so you can revive the ones worth re-working.
  • Follow-up visits without re-entering the job: schedule a callback, a punch list, or approved add-on work (with its own price and balance) against the original job in a short form. It lands on the calendar, the board, and the crew’s phones like any other job.
  • Scheduling calendar with crew filtering, worker badges, time-off, and a subscribe link for Google/Apple/Outlook. Add your own recurring holiday labels.
  • Crews: group your painters into named, colored crews; staff a job with one tap and filter the calendar and reports by crew.
  • A real app for your painters: install-to-home-screen (PWA), a “My Jobs” home, one-tap directions (Google/Apple/Waze), per-job check-in/out that works offline and syncs, photo/receipt/note logging, a “My Hours” view of their own time and pay, and a “Mark Job Complete” button that notifies the office. Workers see only what their permissions allow, never your numbers.
  • Production Rates: the one number every quote leans on and most shops only half-remember. PaintClarity already holds the hours and the paintable area of every completed job, so this screen divides one by the other over your recent jobs and shows the work, per job and as a median, measured from your own crews. It measures; it never changes a quote behind your back, and a quiet Use measured rate button copies a figure into your settings only when you press it.
  • Business Checkup: nine read-only scans of the whole business on one page: completed jobs with a balance due, jobs past their end date not marked complete, won jobs never scheduled, started jobs with no hours or no expenses logged, requests waiting more than two weeks, requests with no quote document, expenses missing a receipt image, and open records with no phone or email. Every line links to the record so it can be fixed in two clicks. It also tells you when the site is not on HTTPS and which features that holds back.
  • Customers: a directory with contact details, lifetime value, job history, and multiple service addresses per customer, built for landlords, realtors, property managers, and GCs whose one account means a dozen properties.
  • Bring your existing records: import customers, and jobs and quotes, from a CSV under Settings. The importer recognizes exports from Joist, Housecall Pro, and Jobber as well as a plain spreadsheet, and shows you the column match and exactly what will happen before anything is written.
  • Business Notes: a simple notebook for vendor account numbers, insurance renewal dates, and reminders, plus “Add a Note to a Job” to drop a note onto any open job’s log without leaving the page.
  • Before/After photos with camera alignment overlay and a compare slider.
  • Color Visualizer: load a photo of the house or the room, select the surface, and turn a color wheel until it is the color you are proposing. The wall changes color and keeps its own shading, grain and texture. Select by fill, by matching color, or by dragging a box over a big flat wall. Handles stucco, siding, brick, concrete block and interior drywall, takes the Sherwin-Williams or Benjamin Moore number alongside it, and prints or saves the render for the customer. The Manual tab runs entirely in your browser: no photo is uploaded anywhere.
  • AI Visualizer (Pro): the other tab. Upload or take a photo, pick colors by brand and name from the Sherwin-Williams and Benjamin Moore books, add a note like “paint the stone wall too, in Alabaster”, and get back a realistic repainted photo to show the customer. This tab sends the photo to OpenAI under your own API key (Settings > AI), billed to your OpenAI account at a few cents per render. Renders can be saved to the job’s photos. Colors on screen are approximate; brand and color names are trademarks of their owners and PaintClarity is not affiliated with any paint manufacturer.
  • Trade calculators, paint-color tracking, and resource links.
  • A choice of visual themes (light, dark, industrial, and more) with a modern app-style navigation bar on desktop and phone, or a full-screen sidebar layout that hides the site’s header and footer.
  • Works with your browser’s translation. The app’s own text is English. Chrome, Safari and Edge page translation, and front-end translation plugins, are supported: customer names, addresses, amounts, dates, job numbers and paint color codes are marked so they stay exactly as entered.
  • Help built in: a five-minute walkthrough video with chapter links, a setup checklist, and a Setup Health panel that says what is still missing before the first quote goes out.

What Pro adds

  • Job financials & profitability: costs, materials, labor hours; gross, expenses, profit, and margin per job; a Profits dashboard with profit-by-classification, profit-per-hour rankings, and profit by crew and by worker (allocated by logged hours).
  • Job Pulse: one page that answers “how is this job doing?” in whatever terms apply right now: a quote waiting on the customer, a job about to start, a job that is running (hours against the quote’s labor, payroll against the price), or a finished job’s after-action review.
  • Expenses & receipts against any job, plus business-level and vehicle expense tracking, spend by vendor, and a duplicate-receipt check.
  • Business Financial Report for your accountant: income and expenses for the year, with sales tax to remit by filing period, one table per tax name and rate, by quarter or by month, on a cash basis following the payment date.
  • A quote request form for your website: the [paintops_quote_form] shortcode files each request on a Leads screen, with Cloudflare Turnstile and built-in spam checks so junk never becomes a lead. Convert to Request builds the request with the customer attached, and asks first only when someone in your directory already looks like this person.
  • Online payments: deposits on quote acceptance and invoice balances through Stripe Checkout, recorded automatically.
  • AI tools (bring your own OpenAI key): estimate dimensions, gallons, and a Description of Work from a photo; scan receipts to auto-fill expenses; get feedback on or a rewrite of your quote wording; draft a payment reminder for an unpaid invoice.

Pro is a paid upgrade handled through Freemius. The free plugin is fully functional on its own; Pro is optional.

Bundled artwork

The four ready-made logos offered under Business > Logo URL (assets/img/logos/) are AI-generated original artwork created for this plugin. They carry no third-party rights and are distributed under the same GPLv2-or-later license as the rest of the plugin. They are optional, off by default, and carry no PaintClarity branding or link.

External services

This plugin can connect to the following third-party services. Some are optional and only run when you enable and configure the corresponding feature.

OpenAI (Pro AI features, optional). When you use an AI feature (Photo Estimate, Receipt Scan, Description-of-Work Feedback or Rewrite), the plugin sends the relevant input, the photo you choose to upload and/or the quote text you are working on, to the OpenAI API using your own OpenAI API key, and receives the generated result. No data is sent unless you click one of these buttons. PaintClarity does not store the photo. Requests go to https://api.openai.com. See OpenAI’s Terms (https://openai.com/policies/terms-of-use) and Privacy Policy (https://openai.com/policies/privacy-policy).

Stripe (Pro online payments, optional). If you enable card payments and a customer pays online, the plugin creates a Stripe Checkout session and verifies Stripe’s webhook using your own Stripe keys. Order/amount details are exchanged with Stripe to process the payment. Requests go to https://api.stripe.com. See Stripe’s Services Agreement (https://stripe.com/legal/ssa) and Privacy Policy (https://stripe.com/privacy).

Google Maps Platform (optional). If you add a Google Maps API key, address fields use Google Places/Geocoding for autocomplete and validation, and job locations may be shown on an embedded map. The address text you type is sent to Google to return suggestions. Requests go to https://maps.googleapis.com and related Google Maps endpoints. See Google’s Terms (https://cloud.google.com/maps-platform/terms) and Privacy Policy (https://policies.google.com/privacy). (One-tap turn-by-turn Directions for your crew use keyless map links and need no API key.)

YouTube and Vimeo (Resources page video embeds, optional). The Resources page (staff-facing, inside your admin area) lets you save links to training videos, and seeds a starter list of publicly available painting tutorials on YouTube. When a staff member clicks a saved YouTube or Vimeo link’s play button, the video is embedded on the page via the provider’s standard embed player (www.youtube.com / player.vimeo.com), which loads content from that provider and is subject to its terms; no data is sent until the play button is clicked, and you can delete any or all saved links. See YouTube’s Terms (https://www.youtube.com/t/terms) and Google’s Privacy Policy (https://policies.google.com/privacy), and Vimeo’s Terms (https://vimeo.com/terms) and Privacy Policy (https://vimeo.com/privacy).

Freemius (licensing & updates). PaintClarity uses the Freemius SDK to manage Pro licenses, deliver Pro updates, and (optionally) collect anonymous usage diagnostics you can opt out of. Site and license information is exchanged with Freemius. See Freemius’s Terms (https://freemius.com/terms/) and Privacy Policy (https://freemius.com/privacy/).

You control every one of these by whether you enter the corresponding API key and enable the feature. With no keys entered, PaintClarity runs entirely on your own site.

Privacy

Your customers’ details live in your own WordPress database. PaintClarity’s author never sees them, and nothing is sent to a PaintClarity server. That also means you, not the plugin, are the one a customer asks when they want to know what you hold about them, so the plugin’s job is to make sure you can answer.

Quote and invoice pages are blocked from search engines. Those pages are reached by a long private link rather than a password, and a link can be forwarded, pasted into a chat, or picked up from a referrer header. Every customer-facing document PaintClarity serves is marked no-index, no-archive at both the page and the header level, so a link that escapes cannot turn into a search result.

Data requests work out of the box. Under Tools -> Export Personal Data and Tools -> Erase Personal Data, WordPress can search PaintClarity by email address. Export collects the customer record, their jobs, quotes, invoices, payments, and the emails you sent them. Erase removes their details from all of it.

Erasing does not destroy your books. Quotes, invoices and payments are kept and stripped of the name, address, phone, email, typed signature and IP address instead of being deleted, because a business is required to keep financial records for years and data protection law allows exactly that. Any quote or invoice link previously sent to that customer stops working. Job photos are left for you to review yourself rather than deleted automatically.

Suggested privacy policy wording for what PaintClarity stores and which services can receive data is added to Settings -> Privacy -> Policy Guide.

Three optional limits, all off by default, under PaintClarity -> Settings -> Privacy & Customer Data: delete the emailed-communication log after N months, forget the IP address recorded when a quote was signed online after N months, and make quote and invoice links stop working after N days. A business working only in the United States can leave all three off and nothing changes.

None of this is Pro. It is all in the free plugin.

Lluniau Sgrin

Gosod

  1. Install PaintClarity from the Plugins screen (Plugins Add New search “PaintClarity”), or upload the plugin ZIP under Plugins Add New Upload Plugin. Activate it.
  2. Create a WordPress Page and add the shortcode [paintops_app]. This one page is your whole PaintClarity app; it routes internally.
  3. Go to PaintClarity Settings and set your Company Profile (business name, logo, country, currency), and review the Setup Health panel.
  4. (Optional) Add team members under PaintClarity Painters/Helpers, set their permissions, and group them into Crews.
  5. (Optional) Add your Quote Terms & Conditions under Business Settings so customers see and sign against them.
  6. (Optional, Pro) Under Settings AI Settings connect OpenAI, under Stripe Payments add your Stripe secret key AND webhook signing secret (both are required before online payment buttons appear), and add a Google Maps API key for address autocomplete.

Cwestiynau Cyffredin

Do I need a paid account to use it?

No. The free plugin runs entirely on your own WordPress site and lets you quote, schedule, and manage unlimited jobs. Pro is an optional upgrade.

What happens to my data if I deactivate or delete the plugin?

Nothing is deleted. Your jobs, quotes, customers, payments, hours, and photos stay in your WordPress database, so nothing is lost if you deactivate temporarily or reinstall later. If you truly want the data gone, delete the plugin’s tables from your database and the paintops-private folder from your uploads.

Does it work without OpenAI, Stripe, or Google Maps?

Yes. Those are optional integrations. If you don’t enter their keys, the related features simply stay off and everything else works, including keyless turn-by-turn directions for your crew.

Can my customers really sign a quote online?

They accept by typing their full name, which is stored with a timestamp and IP address alongside your Terms & Conditions, a solid acceptance record. They can also decline with a reason, and change their minds later.

Who pays for the AI usage?

You do, through your own OpenAI account and key, typically a fraction of a cent to a few cents per action. PaintClarity adds per-month usage caps you control so costs stay predictable.

Can my painters log in without seeing my numbers?

Yes. Painters/Helpers get a dedicated role with opt-in permissions and their own app view: My Jobs, My Hours (their own time and pay only), directions, check-in/out, photos and receipts. Financial figures are owner-level and hidden from workers unless you explicitly grant access.

Does it work in the field with bad reception?

The app installs to a phone’s home screen, and Time Clock check-in/out keeps working offline and syncs when a connection returns.

Where is my data stored?

In your own WordPress database. PaintClarity doesn’t host your business data on an external server.

Can I bring in my customers and jobs from another app?

Yes. Settings has two importers, Import Customers and Import Jobs and Quotes, that take a CSV file. Exports from Joist, Housecall Pro and Jobber are recognized by their column names, and any spreadsheet with a name column works. You match the columns, see exactly what will be created, and then import. Both are in the free plugin.

I charge two taxes on the same job (GST and PST). Can PaintClarity do that?

Yes. Under Business > Pricing Rules, each tax rate takes an optional second tax name and rate. A job created with that pair carries both, and quotes and invoices print the two lines separately. Shops with one tax see no change.

Is the app available in other languages?

The app’s own text is English. It is built to work with your browser’s page translation (Chrome, Safari, Edge) and with front-end translation plugins: customer names, addresses, amounts, dates, job numbers and paint color codes are marked so they are never altered by the translation.

Adolygiadau

There are no reviews for this plugin.

Contributors & Developers

“PaintClarity” is open source software. The following people have contributed to this plugin.

Cyfranwyr

Translate “PaintClarity” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Cofnod Newid

1.2.083

  • Added: production rates by job classification. The Rates page shows, under each category, what its finished jobs measured for each classification (Repaint, New Construction, Realtor and so on), and a “By classification” block with each classification across every category. The same quiet “Use measured rate” sits beside each figure, with Undo. A job’s Labor Days calculator now loads the most specific figure you have set: its category and classification together, then its classification, then its category, then your business figure. Set them on the Rates page, or under Business > Job Classifications and in each category’s Advanced panel. Nothing changes until you set one.
  • Added: Spanish for the painter screens. Under PaintClarity > Painters/Helpers each person has a Language; pick Spanish and that painter’s app is in Spanish: My Jobs, the job page, the Time Clock, Notes & Photos, Add Expense, File a Receipt, Communication History, My Hours, the Vehicle Log, the notices, the dates, and the emails the app sends them (the app invite and the night-before job email). The office screens, your own view and every painter you have not switched are exactly as before, and the setting needs no WordPress language pack. Other languages can be added the same way.
  • Changed: the Residential Painting and Commercial Painting default checklists on a new install carry the items the five retired template categories had and these did not: Staining, Brick, Shutters & Trim, New Drywall Primer, Bare Surface Primer and Caulk Windows & Doors for Residential; New Drywall Primer and Bare Surface Primer for Commercial. A site that has already saved its categories is not changed.
  • Fixed: on a phone, a long schedule line on a job’s sub-pages (Add Expense, Notes & Photos) ran past the edge of its card; it wraps now.
  • Changed: Team Login Duration (Painters/Helpers) now restarts each day a person uses PaintClarity, so someone who opens the app regularly stays signed in; a login only runs out after the set number of days without a visit. It used to count from the day they signed in regardless. Existing logins pick this up on their next visit, and the renewed login survives a browser restart.
  • Fixed: Resources was missing from a painter’s menu; painters now see it (the list only; adding resources stays with the office). A Free painter on a desktop also gets the More menu with File a Receipt, Resources and Help, which that bar did not offer before.
  • Improved: the AI Visualizer now describes each color to the image model in plain words beside its hex (a cream reads as “very light warm off-white, nearly white on a wall”), and tells it to keep the photo’s light, the ceiling, floor and fabrics, and anything seen through a window exactly as they are, so a light wall color does not tint the whole room and trees outside a window are left alone.
  • Improved: a color named or coded in the AI Visualizer’s notes (“Alabaster on the accent wall”, “SW 7008”, “HC-154”) is looked up in the color list and sent with the render as a directive, with its exact value, no click needed; the notes override the surface list. A “keep the trim as is” sentence still names nothing to paint.
  • Changed: the AI Visualizer’s image model defaults to gpt-image-2 on a new install (a site that has saved a model keeps it), and AI Settings gains an Automatic option that renders with the newest image model your OpenAI account offers, checked once a day.
  • Changed: code organization only, no change in behavior: the communications log helpers, the Backup & Data export, and the Setup Health board with the Help Center page moved out of the main plugin file into their own include files.

1.2.082

  • Added: the Calendar has a Grid / List switch above the month. List shows one card per day with one row per job, the layout the phone already uses, for a month too busy for the grid’s cells. Each person’s choice is remembered. In the list, today’s card is marked and the month bar stays at the top of the window as you scroll.
  • Fixed: on the phone, opening the current month lands on today with the month bar in view; it used to slide both under the search bar.
  • Added: the Production Rates page lists every job category under the headline: what its finished jobs measured, how many jobs that rests on, and the rate it quotes from today. A quiet “Use measured rate” beside each figure, and beside the business-wide one, copies the measured rate into the setting the Labor Days calculator reads, with an Undo in the notice. The page still never changes a rate on its own.
  • Changed: five “Add from Template” cards under Business > Job Categories are retired: Interior Repaint, Exterior Repaint, New Construction – Interior, New Construction – Exterior and Commercial Repaint. Each was something the job form already says with its Work Areas boxes and its Job Classification, and adding one lost the residential/commercial distinction. Fence and Handyman Services remain. Nothing saved changes: a category you added from one of those cards keeps working exactly as before.
  • Changed: an Add from Template card reads “Added” once its category is in your list, instead of offering a second copy; delete that category and the card comes back.
  • Fixed: saving Job Categories dropped two things the editor has no field for, the email phrase (“painting quote for your home”) and a category’s default quote title. They are kept now.

1.2.081

  • Changed: job photos now live in a private folder on your server instead of the WordPress media library, the same way receipts have since 1.2.058. A photo opens for you and for the painters on that job, and for nobody else; the media library sat at a web address that worked for anyone who had it. Each photo keeps a small copy beside it for the gallery, the Before/After pairs and the job page, so those load no slower than before. A photo you put on an invoice still shows to the customer holding that invoice link. Checkup shows a card with the number of photos and receipts still in the media library and a button that moves them in batches of 100; everything keeps working while that runs, a photo your website also uses in a page or gallery is copied and left in the media library as well, and a file that is not on the server right now is left alone and counted rather than written off. Photos from the AI Visualizer are kept the same way. The painter’s phone now saves the photos of the day’s jobs along with the job pages, so they are there with no signal even for a job that was never opened, and on a shared phone signing out clears the photos and receipts the app had saved.
  • Changed: the “Review on Capterra” button on Checkup opens Capterra’s own write-a-review form.

The full history is in changelog.txt in the plugin folder.