Working Offline

How offline sync works in the mobile app, what data is available without connectivity, and how to troubleshoot sync issues.

Beginnerownermanagersales repcrew leadUpdated 2026-10-01

Working Offline

The Clean Estimate Pro mobile app is designed to work in areas with limited or no internet connectivity. You can view client data, create estimates, and capture job details while offline. The app stores changes locally and syncs them to the server when your connection is restored.


Cold Start Without Connectivity

Android internal preview startup

The internal Android preview includes its fonts, so the startup screen keeps its design without a network connection. After an online sign-in, owner and crew sessions have reopened to their cached workspace after a force-stop and offline relaunch. A fresh profile without a saved session opens to sign-in. These checks apply to this internal preview; they do not promise that every account or action is available offline. After queued work reached zero, ordinary sign-out returned to sign-in and an offline force-stop relaunch stayed signed out.

The internal Android preview uses the session and workspace last verified online to attempt an offline start. A secure, user-scoped snapshot provides the selected organization, membership and role, available memberships, and basic profile context so the matching role shell and cached field data can load. Network-backed actions still need connectivity and server authorization.

The app accepts the snapshot only when its user, membership, and organization identifiers agree. A malformed or cross-user snapshot is ignored, and the offline workspace authorization expires 24 hours after its last successful server verification. A deliberate sign-out with no queued work clears the saved workspace as before. If changes or photos remain on the phone, the sign-out changes are scoped to the signed internal Android QA preview. The preview shows Unsynced work on this device and the pending-work counts. Before showing the final discard confirmation, the app waits for in-flight app and network requests to finish or time out, then counts pending work again. Choose Keep working to resume the app without signing out, or Discard work and sign out to discard the full local queue. This local discard does not delete records or photos already saved in your office. If the pending work changed before confirmation, review the refreshed counts and confirm again; work is not silently discarded.

A different account cannot open, upload, or discard another account's pending work. The preview shows Unsynced work belongs to another account. Sign back in to sync or manage that work. with Sign out. Sign back in using the account and organization that saved the work to sync or explicitly discard it. The app waits for in-flight requests to finish or time out before taking a fresh count of pending work.

The snapshot is not a second login credential. While the phone is offline, it cannot learn that a server administrator revoked a session or membership. Network-backed reads and writes still require a valid server session, and the app refreshes the live membership and organization after connectivity returns. An explicit authorization rejection clears the snapshot instead of falling back to offline access.


Canvassing Offline

Canvassing has its own organization- and user-scoped local cache and durable queue. Open each assigned territory while connected before entering a low-service area.

During an already-started shift, you can:

  • Search and page through downloaded targets in map or list view.
  • Record append-only door outcomes and see the marker change immediately.
  • Long-press a missing property inside the assignment and keep its marker pending while the address waits to resolve.
  • Preserve the original visit time and available device location.
  • Create and autosave a residential estimate draft with a still-valid,

verified pricing bundle that this account downloaded while connected.

  • Queue initial proposal delivery or an intentional resend.

The queue replays dependencies in order: a missing property must resolve before it can receive an outcome, the door visit must sync before its attributed proposal, and the proposal must exist before its delivery. A blocked or failed prerequisite prevents the proposal from being presented as sent.

Client-generated identifiers prevent duplicate visits. Proposal delivery uses a stable key for retries, while each intentional resend receives a new key. A permanently rejected item moves to Needs review so later valid work can continue.

Starting a new shift, AI assistance, customer acceptance and signatures, payment links, dispatch or job-schedule updates, and changes to an existing V2 lead appointment require connectivity. A new V2 lead created offline can still include its appointment because the new record and schedule enter the queue together. Reconnect before rescheduling or clearing an existing lead so a delayed device edit cannot overwrite a newer office change. A local residential draft must sync and then be reopened as the canonical server estimate before the customer can review terms or sign.

Pending data stays pinned to the organization and user that created it and resumes only under that saved user session. If pending work exists, signing out requires an explicit discard choice; otherwise the owner can stay signed in and sync it. Reconnecting lets the server confirm whether the session and membership are still valid.

Internal Android preview startup messages

The internal Android preview shows Preparing app… while fonts load and Connecting to sign-in… while sign-in initializes. If font preparation fails, it shows Unable to prepare app. Please restart. If workspace sync has not recovered after 15 seconds, the app shows a clear sync problem with Retry and Sign out. Signing out checks pending work again and preserves the existing keep-working or explicit-discard choice. These recovery messages are part of the internal preview and do not establish a general mobile release.

Upcoming route capture while offline

Optional on-shift route capture remains off and is not available in the released app. When available, route points will use a bounded local queue while the device is offline. Ending a shift offline will stop collection immediately; the shift-end update will remain pending for retry after reconnection. Route capture will not run off duty. For consent, permissions, the planned retention policy, and the complete field workflow, see Door-to-Door Canvassing.

How Offline Sync Works

The app uses a local database on your device to cache data and queue changes. The sync process follows three stages:

  1. Pre-cache -- When you are online, the app downloads and stores a local

copy of your most-used data. Residential estimating uses one verified bundle containing the active price book, supported services, add-ons and size options, approved custom-item templates, published Suds Club setup, and your effective pricing permissions.

  1. Offline queue -- When you make changes without connectivity, the app

saves each supported action (new estimate, a new V2 lead with its appointment, client edit, note, photo) to a local queue with a timestamp. Estimate, customer, and property changes save together; if a save fails, the form stays open with its entered values so you can correct or retry it. Before a crew photo enters the queue, the app saves it in durable device storage. A queued photo remained available after an app restart, and its thumbnail appeared again. After its record metadata synced and the connection and server were ready, the queued photo uploaded automatically.

  1. Sync on reconnect -- When your device regains an internet connection,

the app processes eligible queued changes and pulls in updates from other team members. Permanently rejected items stay saved for review; they are not automatically uploaded.

Screenshot placeholder
Diagram showing the three sync stages -- Pre-cache, Offline Queue, and Sync on Reconnect

Company and service-site eligibility during sync

Mobile sync now preserves company and service-site boundaries for client eligibility. A company portfolio with one or more child service sites remains a rollup, not a work target, even when some child sites are hidden by the member's office-location permissions. This does not reveal hidden sites, change permissions, or add a selection flow. Standalone clients and service sites keep their existing work behavior under the same access rules.


Sync Status Notices

Routine background syncing stays out of the way. The app does not show a global banner while saved proposals and other normal changes upload.

When the device is offline, a notice confirms that supported work is being saved locally. Eligible queued changes upload after the connection returns. A permanently rejected item stays saved for review and does not sync automatically; see Saved work that needs review below.

If a saved change needs attention, open More > Offline & Storage. Retry sync puts failed work back in the queue and tries again. Acknowledge items hides the prompt for the current app session without deleting the saved change; failed work remains counted and available for another retry. Once no queued or failed work remains, the error state clears automatically. The queue summary includes proposal updates, deliveries, photos, pipeline updates, and other saved work so its visible buckets reconcile with the total.

Saved work that needs review (internal Android preview)

These recovery states are scoped to the signed internal Android QA preview. They are not generally distributed; no public Android or iOS release is confirmed. A permanently rejected change remains saved on the phone for review and is not retried automatically. For an access rejection, the status is Access revoked · {N} changes saved on this phone. Other permanent rejections use Needs review · {N} changes saved on this phone. Access revoked is reserved for access failures; a temporary network error continues through the normal retry behavior.

Open More > Offline & Storage or tap the status to see the list of failed operations. Review and retry opens the saved item for correction when possible, checks current permission for that operation again, and retries only under the account that saved the work. For a correctable lead error, it opens the saved Leads > New lead form; saving the correction retries that same lead rather than creating another one. Discard saved work removes failed items from this phone only when no unrelated healthy queued work remains. Let healthy items sync first, or use Discard work and sign out if you intend to discard the full local queue. Neither action deletes records or photos already saved in your office. A different account cannot review, upload, or discard the prior account's queue.

Commercial draft saves with an uncertain result (internal preview)

The commercial editor's successive edits on one device have been verified to survive reconnect and a cold restart. If the app closes after the server applies an edit but before the app confirms it, the saved change stays in Needs review as the original edit. It is not silently discarded or replayed automatically, and retrying the unchanged item may require manual review. Reopen the draft when online and compare it with your intended changes before deciding what to retry. If another teammate has changed the draft, refresh and reconcile the newer version before saving.

For Holiday Lights drafts, queued edits replay to the same draft and remain available after an Android cold reopen. If a save result is unclear, open the same draft and compare its current scope before retrying. Do not create a replacement draft to resolve an uncertain save.

When a reviewed meter correction is successfully accepted, its earlier rejection warning clears. If the server saves the audit entry but refuses the meter change, the warning remains and that correction stays excluded from accepted meter history.

After the canonical Commercial, Fleet, and Holiday Lights sync rollout, an online authenticated app start performs one narrow recovery pass for matching older failed proposals whose errors specifically say the former proposal-table contract contained an unsupported sync column. Those identified legacy items return to the queue and use the new server-validated estimate sync. The pass runs only once for each organization and user during that signed-in app session. Validation failures, delivery failures, malformed records, other estimate types, and another workspace's items remain untouched and still require normal review.

The sync engine waits for the device's first network result and requires an internet-reachable connection before uploading. A Wi-Fi or cellular link that cannot reach the internet does not consume retries or turn saved work into a failed item.

Signing out, changing workspaces, or otherwise closing the active mobile session also shuts down that session's network and app-state sync listeners. Only the current session can resume its scoped queue when the app returns to the foreground.

Automatic vs. Manual Sync

The app attempts to sync eligible queued work when it detects a network connection. Work marked for review remains saved until you retry it or explicitly discard it. You can also trigger a manual sync at any time:

  1. Go to Settings > Offline.
  2. Tap Sync Now.

This is useful when you want to confirm all changes are uploaded before switching devices, ending your work session, or heading into an area without connectivity.

Screenshot placeholder
Offline settings screen with the Sync Now button highlighted

What Data Is Available Offline

Not all data is cached locally. The app prioritizes the information you are most likely to need in the field.

Always Available Offline

The following data is cached automatically and accessible without connectivity:

DataDetails
Client listNames, contact details, hierarchy, and addresses for clients permitted by your role and location scope that have synced to this device
Client profilesFull profiles including estimate history, notes, and communication log
Residential pricing configurationA verified organization-and-user-scoped snapshot of active rates, multipliers, minimums, tax, and Red Line settings. It expires no later than seven days after download.
Residential services and add-onsActive supported price-book rows, including configured add-on size choices. Unsupported, duplicate, inactive, or foreign-workspace rows are not offered.
Recent estimatesEstimates created or modified in the last 30 days, including all line items and totals
Your pipeline dealsDeals assigned to you with stage, value, and activity history
Custom item templatesActive approved templates from the verified residential bundle. A user with estimate-management permission may also add an ad-hoc item.
Tax ratesYour configured tax rate settings

Not Available Offline

The following features require an active internet connection:

  • Provider delivery -- email and SMS cannot reach the provider without

connectivity. You can save a draft or queue an eligible proposal delivery offline; Queued means waiting on this device, not delivered.

  • Customer acceptance and signatures -- a locally saved proposal cannot

collect or queue a signature. Sync it, reopen the canonical server estimate while connected, and let the customer review the exact scope, total, pricing version, and current organization terms before signing.

  • Google Places autocomplete -- address search and the Auto-fill Property feature require an API call. Enter addresses and property details manually when offline.
  • Photo uploads -- supported Residential, Commercial site-condition,

Holiday Lights property, and job photos taken offline are stored on the device and queued. Queued means waiting on this device, not uploaded. In the Android internal preview, a queued crew photo uploaded automatically after its record metadata synced and the connection and server were ready. Wait for the app to confirm upload before expecting others to see the photo. A queued proposal delivery waits until its photos are available on the saved estimate.

  • Real-time notifications -- push notifications require a connection to the notification server.
  • PDF preview and generation -- PDF rendering happens server-side and requires an internet connection.
  • AI features -- lead scoring, pricing analysis, photo estimation, and AI-generated proposal text all require server connectivity.
  • Payment processing -- Stripe payment links, invoice creation, and payment status checks require an active connection.
  • Integration syncs -- calendar, QuickBooks, and Workiz data syncs require connectivity.

If you attempt to use one of these features while offline, the app displays a message indicating that the action requires an internet connection.


Creating Estimates Offline

You can build a residential estimate without an internet connection when this account has a still-valid verified bundle. A selected Suds Club plan requires an online refresh before delivery can be queued. The process is otherwise similar to the online workflow with a few differences.

Step-by-Step

  1. Tap the + button on the Proposals tab to start a new estimate.
  2. Select the estimate type (Residential, Commercial, Fleet, Holiday Lights,

or Generic Quote).

  1. Client and Property -- type the client name and details manually. If the client exists in your cached data, the app suggests matches from the local database. Google Places autocomplete is not available offline, so enter the full address, city, state, and ZIP by hand.
  2. Services and Pricing -- select services and enter their required

measurements. For a Generic Quote, use verified cached price-book services or add a custom service, product, or equipment item. Pricing uses the verified bundle cached for the signed-in organization and user. If that bundle is missing, invalid, or expired, the builder asks you to reconnect instead of guessing rates or using another workspace's data. Property details remain editable and auto-saved. The pricing notice provides Try pricing again and Keep draft & exit, so the rep can leave safely without losing the property work or creating an unverified total.

  1. Review -- review the estimate summary. Tap Save as Draft, or use

Queue Delivery when the proposal is complete and its verified pricing bundle is still valid. A queued delivery waits for successful proposal sync and provider connectivity. This also applies to the first send from every native estimate type: the app binds the queued delivery to the server-issued revision after the canonical estimate write completes.

Screenshot placeholder
Review screen showing Queue Delivery, Save as Draft, and offline status

What Happens to Offline Drafts

Offline drafts are stored in the local database and marked with a pending sync badge in your Proposals list. When you regain connectivity:

  1. The app detects the connection and begins the sync cycle.
  2. Draft estimates upload to the server, where active catalog rows,

measurements, permissions, Suds Club availability, and totals are validated again.

  1. The drafts appear in your estimates list on all devices -- mobile and web.
  2. You can then open any draft, review any changed pricing or catalog choice,

and tap Send Estimate to deliver it to the customer.

A proposal queued as Sent must carry the exact revision of the residential bundle that was reviewed. If pricing, a service, an add-on option, an approved template, Suds Club setup, or an effective permission changed while the device was offline, sync stops that proposal for review. It does not retry the same stale payload or let a queued delivery overtake the rejected proposal write.

The pending sync badge disappears once the upload completes successfully.

Screenshot placeholder
Proposals list showing a draft estimate with a pending sync badge next to the Draft status

Editing Existing Data Offline

You can edit client details and estimate drafts while offline. Edits are saved locally and synced when you reconnect.

Client Edits

Open a client profile and update their contact information, address, or notes. Changes save to the local database immediately. A pending sync badge appears on the client record until the edit uploads to the server.

Estimate Edits

Open any draft estimate and modify services, pricing, client details, or add-ons. The app recalculates totals using your cached pricing data. Save the changes and they queue for sync.

When a saved mobile draft cannot be reopened, the app distinguishes a missing draft from a temporary local-storage failure. It does not keep the estimate builder on an indefinite loading screen; use the displayed recovery action to return to Estimates or try the draft again.

Adding Notes and Photos

You can add notes to client records and job entries while offline. Photos taken with your device camera attach to the relevant record locally. Notes upload during sync. Queued crew photos retry automatically after their record metadata has synced and the connection and server are ready. Wait for the app to confirm upload before expecting others to see a photo. If a pending photo appears in the sign-out warning, choose Keep working to retain it on the device.

Crew job-note editing is already available in the mobile app. Authorized office staff can edit the same crew-visible note from web job details; see Managing Jobs. Mobile conflict review remains a separate preview and is not part of the released app.


Conflict Resolution

If two team members edit the same record while one or both are offline, a conflict may occur during sync. The app handles conflicts using the following rules:

Simple Fields

For straightforward fields like client phone number, email, or address, the most recent change wins based on timestamp. If you updated a phone number at 2:00 PM and a colleague updated the same phone number at 2:15 PM, your colleague's change takes precedence.

Notes

Append-only notes, such as client activity comments, preserve both entries and merge them chronologically. The office can edit the shared job note from web job details. Mobile conflict review is available in the internal Android preview only; it is not part of the production mobile app. It will not merge offline edits or choose a winner automatically.

Mobile job-note conflict review (internal Android preview)

New text in the internal Android preview's mobile Notes field is limited to 8,000 characters. An existing oversized draft remains available for correction; you can edit or remove text, but cannot add characters until it is within the 8,000-character limit.

In the internal Android preview, an offline edit to the job note will stay queued on the device until it can sync. If the office or another crew member has saved a newer version, the app will retain both your note and the current shared note and ask you to review them. Job notes need review appears with a Review action; the review shows Your note and Current shared note. Choose Use current note or Save my note only after comparing the text, or select Cancel to leave both versions unchanged. If the current note changes again during review, the app checks again and asks you to choose based on the newer version. It does not overwrite a newer note automatically.

The conflict-review flow retains already queued local edits and both conflict versions across app restart so you can review and choose after reconnecting. A failure before local enqueue leaves the text in the Notes field for another attempt; it has not entered the local queue. This mobile flow is for internal Android preview only and is not part of the production mobile app. For its save-failure alerts and the receipt kept when an upload is rejected after job access changes, see Job notes.

Estimates

If two team members edit the same estimate while one or both are offline, the app flags the conflict during sync. A conflict resolution dialog appears prompting you to review both versions side by side and choose which to keep.

Screenshot placeholder
Conflict resolution dialog showing two versions of an estimate with options to keep either version or merge

Conflict Frequency

In practice, conflicts are uncommon. Most offline usage involves working on different client records or creating new estimates rather than editing the same data simultaneously.


Configuring Offline Settings

Go to Settings > Offline to manage how the app handles local data.

Screenshot placeholder
Offline settings screen showing the offline mode toggle, cached data size, Sync Now button, and Clear Cache button

Offline Mode Toggle

Offline mode is enabled by default. The toggle controls whether the app maintains a local data cache. Leave this on unless you have a specific reason to disable it.

Data Cache Size

The settings screen shows how much device storage the app is using for cached data. Typical usage ranges from 50 MB to 200 MB depending on the size of your client list and the number of recent estimates.

Sync Now

Tap this button to manually trigger a full sync cycle. The app uploads any pending local changes and downloads the latest data from the server.

Clear Cache

Tap this to remove all locally cached data and force a full re-download on the next sync. Use this only if you suspect corrupted local data or need to reclaim device storage.

Warning: Do not clear the cache while you have unsynced changes. Verify that the sync status indicator shows a green checkmark before clearing. If you clear the cache with pending changes, those changes are lost permanently.


Preparing for Offline Work

Before heading into an area with limited connectivity, take these steps to ensure you have the data you need:

  1. Open the app while online. This triggers a background sync that downloads the latest client and pricing data.
  2. Tap Sync Now in Settings > Offline to force a complete sync cycle.
  3. Verify the sync indicator in the app header shows a green checkmark, confirming all data is up to date.
  4. Browse the clients and estimates you plan to work with during your offline period. Accessing a record ensures it is fully cached in the local database.
  5. Check your pricing configuration by viewing the Pricing section in

Settings. Open the Residential builder while connected so the current verified bundle is available before creating estimates offline.


Syncing When Back Online

When your device reconnects to the internet, the sync process attempts eligible queued work automatically within a few seconds. Permanently rejected items remain saved for review instead of being retried as if they will sync.

Sync Order

The app processes queued changes in a specific order to maintain data integrity:

  1. New client records upload first so that estimates can reference them.
  2. Client edits sync next.
  3. A new lead and its details sync together; the app confirms the saved lead

before linking its service property photo.

  1. Property photos upload after the property is confirmed, then ordinary lead

and property edits continue syncing.

  1. New estimate drafts upload after their customer, lead, and property

dependencies.

  1. Estimate edits sync.
  2. Notes and other metadata sync.
  3. Estimate photo uploads run after the first canonical estimate write. The app

then saves the returned HTTPS references into a canonical estimate revision before customer delivery can continue. Large files may take longer depending on connection speed.

That client-first order is also the privacy boundary. Dependent leads, properties, and estimates are accepted only after the customer is visible to the signed-in location. A stale queue item that names a hidden or missing customer is rejected as unavailable without revealing whether that ID exists.

Sync Progress

A progress indicator appears showing the number of pending items and the current upload status. For example: "Syncing 3 of 7 items."

Screenshot placeholder
Sync progress indicator showing "Syncing 3 of 7 items" with a progress bar

Completion

When sync finishes, the indicator returns to the green checkmark state for work confirmed by the server. Treat a queued photo as uploaded only after the server confirms it and the app shows its saved reference.

Queued proposal deliveries also finish at this point. If a proposal was created directly on mobile and does not yet have a linked estimate record, Clean Estimate Pro now sends a signed proposal-view link with a token query parameter instead of dropping the SMS send or requiring an older unauthenticated fallback URL.

That signed-link flow depends on the server-side CUSTOMER_TOKEN_SECRET environment variable. Keep that secret configured and stable across deploys, and expect customer delivery links to expire after their configured lifetime rather than staying valid forever.


Troubleshooting Sync Issues

Changes are not syncing

  1. Verify your internet connection by opening a browser and loading a web page.
  2. Go to Settings > Offline and tap Sync Now to trigger a manual sync.
  3. If the sync fails, read the error message displayed below the Sync Now button. Common causes include expired authentication tokens and temporary server issues.
  4. If the error mentions authentication, reconnect and sign back in with the

same account and organization that own the queued work. When a permanent access rejection is stored, use Review and retry after access is restored. Discard saved work is available only after unrelated healthy queued work has synced; if you intend to discard the full local queue, use Discard work and sign out. Do not switch accounts to manage the prior account's work.

  1. If the header warning remains after the queue reaches zero, tap Retry.

The warning should clear after the app confirms that no failed work remains. You can also close the warning without deleting saved work.

Duplicate records after sync

This can happen if you create a new client offline that another team member also created while you were disconnected. The app detects potential duplicates based on matching email address or phone number. When detected, a merge prompt appears asking you to combine the records or keep them separate.

Screenshot placeholder
Duplicate client detection dialog with Merge and Keep Separate options

Sync takes too long

Large photo uploads are the most common cause of slow syncs. If you have many queued photos:

  1. Connect to a Wi-Fi network for faster upload speeds.
  2. Keep the app open and in the foreground during the sync. Mobile operating systems may throttle background data transfers.
  3. Wait for the sync to complete before closing the app. Interrupting a sync mid-transfer can cause it to restart from the beginning on the next attempt.

Cached data seems outdated

Pull to refresh on any list screen first. If data still appears stale:

  1. Go to Settings > Offline.
  2. Tap Sync Now and wait for it to complete.
  3. If data remains outdated, tap Clear Cache (after confirming you have no pending changes) to force a full re-download of all data.

Estimate pricing differs from web

This usually means the verified residential bundle is missing, expired, or no longer matches the active price book. A manager may have changed pricing, catalog options, templates, Suds Club, or your pricing permissions since the estimate was reviewed. Reconnect, tap Sync Now, reopen the estimate, and review the refreshed measurements, choices, and total before sending.

Error: "Session expired"

Your sign-in has expired after an extended offline period. Log back in with the same account and organization to resume its saved offline work. If work is pending, a different account cannot open or manage it. The original account must sync or explicitly discard the work before another account can use the device.


Tips

  • Sync before you leave the office. A quick tap on Sync Now ensures your local data is current before heading into the field.
  • Save estimates as drafts when offline. Finalize and send them as soon as you reconnect -- it takes only a few seconds.
  • Monitor the sync indicator. The icon in the header tells you at a glance whether your data is current or has pending uploads.
  • Use Wi-Fi for the initial sync. The first sync after installing the app downloads your full client list and pricing data. A Wi-Fi connection avoids consuming mobile data.
  • Do not clear the cache unnecessarily. Clearing forces a full re-download of all data. Only use it when troubleshooting persistent issues.
  • Take photos on-site even without signal. They attach to the relevant

record locally. Eligible photos upload after you reconnect; a permanently rejected photo remains saved for review instead of retrying automatically.

  • Check the sync status before switching devices. If you create estimates on mobile and want to continue on the web, make sure the green checkmark is showing first.

Was this article helpful?

Still need help? Contact support