Subcontractors
How do I hide job pricing and client contact details from subcontractors in field service software?
Store two numbers on every subcontracted job, the client price and the sub's payout, and give subcontractors a role or portal that can only see the payout, the scope, the site address and an on-site contact, never the client's price, account contact or billing details. The restriction has to be enforced by the software's permissions on the server, not just left off a screen, because hidden fields that still reach the phone, a PDF or an API response can be read. Check the documents too: the work order, photos and PDFs a sub receives should be generated without prices, and the client's own work order should never be forwarded as it arrived.
- Two prices per job: what the client pays and what the sub is paid. The sub only ever sees the second.
- Give subs the site address and an on-site contact, not the account contact who buys the work.
- Use a contractor role with no pricing access, not a technician role with pricing switched off on one screen.
- Re-check every document the sub receives: work order PDF, forwarded email, attachments, invoices.
- Permissions are a control, not a contract. Keep a non-solicitation clause in your sub agreement too.
Hiding data slows a sub down from going direct; it does not stop a sub who meets the client on site. The agreement and the relationship still do most of the work.
Facts checked as of November 2026. Sources at the end of the page.
Step by step
How it works, step by step
The setup is the same whether a sub does one job a month or fifty. What changes is whether they get a login or a link per job.
1. Split the job into a client side and a sub side
The client side holds the client price, the client's work order or PO number, the billing entity, the account contact and the margin. The sub side holds the payout (a fixed amount, an hourly rate or a not-to-exceed amount), the scope, the site address, the due date and the on-site contact. These are separate fields, not one price with a discount.
2. Decide what an on-site contact is
Subs need someone to let them in: a store manager on duty, a site phone, a gate code. They do not need the facilities manager who sends you the work. Put the on-site contact in its own field and leave the account contact on the client side.
3. Give subs a role with no pricing access
Most FSM tools have a contractor or limited role. Pick the one that removes quotes, invoices and pricing entirely, then check what it still shows: client name, client phone and email, other jobs at the same client, attachments.
4. Write the sub's work order from the sub side only
The document a sub receives (PDF, email or link) is generated from the payout, scope and site fields. It carries your PO number, not the client's price or their work order. If the client sends a PDF work order, keep it on the client side of the job and do not attach it to the sub's copy.
5. Keep messages flowing through you
Sub questions and updates come back to the job (a link, a portal or your office number), so the sub has no reason to ask for the client's details. Changes in scope or price go to you as a variation request, and you take it to the client.
6. Test it as the sub
Log in as a test sub, or open a sub link, and try to find the client price: on the job, in the line items, in attachments, in the job history, in a PDF and in the app after a pricebook sync. If you can see it, so can they.
Where it breaks
Why it goes wrong
These are the problems buyers described on our sales calls, from facility maintenance, property maintenance, cleaning and lift maintenance businesses that run on subcontractors.
The sub quotes the client directly next time
A commercial facility maintenance coordinator with about 200 subs on file said the sub must not know any pricing or have any way to contact the retail client. If a sub sees that the client pays $480 for a job that pays them $300, the next call goes straight to the client.
The role that hides prices from employees does not fit subs
A UK lift supplier with about 70 subcontractors wanted its own technicians to see job costs and pricing and its subs to see neither. Tools built for employees often have one field role, so the business ends up either hiding prices from everyone or showing them to everyone.
A contractor role that still shows prices
Some contractor roles are built for subs who quote and invoice the end client themselves. In ServiceM8, for example, the Contractor role can see sale pricing and quote and invoice clients; only the Strict Contractor role has no access to quotes, invoices or pricing. Picking the first one by name leaks exactly what you wanted to hide.
The client's price list leaks through a shared view
A property maintenance marketplace did not want property managers to see its full price book either, because they would shop it and hold the business to the lowest line. The same leak happens in the other direction when subs can browse the full price book from the app.
One permission unlocks more than you meant
Customer phone and email are often switched on together with something the sub does need. In Housecall Pro, the permission a field tech needs to approve jobs and take signatures is the one that also shows prices. Check every permission a sub needs for what else it unlocks.
Hidden on screen, still in the data
A price left off a screen can still be in the API response, the offline copy on the phone or a PDF. OWASP's guidance is that access control is only effective when it runs in trusted server-side code, and that anything that is not public should be denied by default.
The options
Ways to do it
| Approach | What hides the price | What the sub can still see | Good for |
|---|---|---|---|
| Email or text a retyped work order | You retype only the scope and payout | Whatever you forget to remove, including forwarded attachments | A handful of sub jobs a month |
| ServiceM8 Strict Contractor role | Role has no access to quotes, invoices or pricing and cannot add items to jobs | Their own jobs and schedule, and clients on jobs allocated to them | Small trade businesses already on ServiceM8 |
| Jobber Field crew permission level | Field crew cannot see pricing or costs; Show Pricing is a separate permission | Their own schedule; client access can be set to name and address only for assigned jobs | Subs who work for you most days |
| Zoho FSM Limited Field Agent profile | Profile without the Show Pricing permission | Work orders and appointments without pricing | Teams already on Zoho |
| Sub portal or job link built from the sub side of the job (Fieldproxy) | The sub's screens only contain the payout, scope, site and on-site contact; portal users see only rows tied to them | Exactly the fields you put on their screen or link | Mixed networks of regular and one-off subs |
As of November 2026, from each vendor's own help pages (sources below). Role names change between versions, so log in as a test sub before you trust any setting.
Worked example
A worked example: one retail repair, two prices
Say a facility maintenance company receives a work order from a retail chain's facilities manager to fix a back door that will not lock. It sends the job to a local handyman sub.
| Field | Office sees | Sub sees |
|---|---|---|
| Client | Retail chain, billed to its property services company | Store name only |
| Client work order | WO 77314 PDF from the facilities manager | Not shown |
| Your job and PO number | J-2208, PO 48812 | PO 48812 |
| Price | Client price $480 | Payout $300, not to exceed $350 without approval |
| Margin | $180 (37.5%) | Not shown |
| Account contact | Facilities manager, phone and email | Not shown |
| On-site contact | Store manager on duty, store phone | Store manager on duty, store phone |
| Scope | Replace lock cylinder on rear exit door, test, photos before and after | Same |
Worked example with made-up numbers. If the sub finds the frame is damaged and the job will cost more, they submit a variation of, say, $140 with photos. You decide what to charge the client and approve the sub's $140 separately; the sub never sees the client's revised price.
Before you buy
What to check before you buy
Good signs
- Payout and client price are separate fields on the job, not one price with a markup
- A contractor role or portal with no pricing access at all, separate from your own technicians' role
- Client contact fields can be hidden while an on-site contact stays visible
- Sub work order PDFs and links are generated without prices
- The restriction holds in the mobile app after a sync and in the API, not only on the web screen
- Subs do not need paid seats, so you are not tempted to share one login
Red flags
- The only way to hide prices from subs is to hide them from your own technicians too
- The contractor role lets subs quote and invoice the end client
- Subs can browse the full price book from the app
- The client's original work order is attached to the job the sub sees
- Permissions are described as hiding a column on a screen, with no word about what the server returns
In Fieldproxy
Setting it up in Fieldproxy
Fieldproxy is set up around your process, so the client side and sub side of a job are fields and screens we build with you. Field names below are examples.
Two prices on the job
Each job carries the client price and the sub payout as separate fields (e.g. client_price, sub_payout, sub_nte), plus the client's work order number on the client side and your PO number on both. Reports show margin per job; subs never see the client side.
A portal for regular subs
Subs who work with you every week become portal users. They sign in with their own email and password to one web app whose screens show the payout, scope, site, on-site contact and PO, and they see only the jobs tied to them, enforced by Postgres row security. Fieldproxy is one price per company with unlimited users, so subs do not add seats.
A link for one-off subs
A record link opens one job for the person it was made for, with no login. You choose the fields on it, and the check before publishing gives a plain-English summary of who can open it, what they see and what a response writes, so you can confirm the client price is not on it. Links can expire and be revoked.
Your own technicians keep their view
Your employees use the Android and iOS technician app with its own screens, which can show pricing, quotes and payment links. The sub portal is a separate app, so hiding prices from subs does not hide them from your team.
Variations go through you
A sub submits a variation from the job with photos and an amount. It lands in an approval step; you approve the sub's amount and, separately, quote the client. Approval workflows (/solutions/approval-workflows) can require a manager when a variation passes the not-to-exceed amount.
Questions come back to the office
Sub replies to a job text reach your inbox, and the Text agent (/agents/text-agent) can answer job questions against the sub side of the record. The Document intelligence agent (/agents/document-intelligence-agent) reads the client's PDF work order into the client side of the job, so the original never needs forwarding.
How switching works
How switching to Fieldproxy works
We move your data over and set the system up to the way you already work. Fieldproxy replaces the old tool; it does not run alongside it.
Show us a real sub job
The client's work order, the price you charge, what you pay the sub, and what you send them today.We split the job into client and sub sides
Client price, account contact and client work order on one side; payout, scope, site and on-site contact on the other.We build the sub portal and job link
Regular subs get a portal login, one-off subs get a link. We test both as a sub and show you what they can and cannot see.Load your subs and go live
Your sub list comes across in setup with trades, areas and rates. Your own technicians keep their app with pricing.
FAQ
Questions people ask
- Can I hide pricing from subcontractors but show it to my own technicians?
- Yes, if subs and technicians have separate roles or separate apps. Avoid tools where the only field role is shared, because you will end up hiding prices from everyone or no one.
- What contact details does a sub actually need?
- The site address, access notes and an on-site contact such as a store manager or site phone. They do not need the account contact who buys the work, the billing entity or the client's email.
- What should the work order I send a sub show?
- Your PO number, the scope, the payout or not-to-exceed amount, the site, the due date and the proof you need back. Not the client price, the client's own work order or their contact details.
- Can a sub ask for more money without seeing the client price?
- Yes. The sub submits a variation with photos and their amount. You approve their amount and separately decide what to charge the client.
- Is hiding a field on the screen enough?
- No. If the price still reaches the phone, a PDF or an API response, it can be read. OWASP says access control is only effective in trusted server-side code. Test as a sub after a mobile sync.
- Can I stop subs from working for my clients directly?
- Software only limits what they learn from you. A non-solicitation clause in your sub agreement does the rest; check it with a lawyer for your state or country. The US FTC rule that would have banned most non-competes is not in effect after a federal court stopped it in August 2024.
- Should subs see my price book?
- Only the items they are paid for, at their rate. If subs add parts, give them a sub price list or let them enter cost with a receipt, and price it to the client yourself.
- Do subs need paid seats in Fieldproxy?
- No. Portal users count as users, which are unlimited, and job links need no account. Fieldproxy is one price per company with unlimited users. See /pricing.
Sources
Competitor details on this page come from the vendors' own pages and documentation, checked as of November 2026. Plans and prices change, so check the vendor's current page before you decide.
- ServiceM8: Security Roles Overview: https://support.servicem8.com/help-center/advanced-setup/advanced-setup/security-roles-overview.md
- Jobber Help Center: user permissions: https://help.getjobber.com/hc/en-us/articles/115009568687
- Housecall Pro: team member roles and permissions: https://help.housecallpro.com/en/articles/1073431-team-member-roles-permissions
- Zoho FSM: how can I hide pricing from my field agents?: https://help.zoho.com/portal/en/kb/fsm/faqs/general/articles/how-can-i-hide-pricing-from-my-field-agents
- ServiceTitan: hiding material costs, including in ServiceTitan Mobile: https://help.servicetitan.com/commercial/docs/what-is-the-process-for-hiding-material-costs-from-customer-facing-invoices
- OWASP Top 10: A01 Broken Access Control: https://owasp.org/Top10/A01_2021-Broken_Access_Control/
- PostgreSQL: row security policies: https://www.postgresql.org/docs/current/ddl-rowsecurity.html
- PostgreSQL: privileges, including column-level: https://www.postgresql.org/docs/current/ddl-priv.html
- FTC: Noncompete Rule status: https://www.ftc.gov/legal-library/browse/rules/noncompete-rule
Related
Keep reading
- How can subcontractors receive, update and close jobs without an app?
- How do I stop dispatching subs whose insurance or W-9 has expired?
- Approval workflows
- Document intelligence agent
- What is the best field service software for a 5-10 person HVAC team?
- ServiceTitan alternatives for small HVAC companies (under 50 techs)