Data Processing Agreement

Between:

(1) The Customer — the business that subscribes to RouteRound, named in the subscription ("you", "the Controller"); and

(2) Desultory Ltd, of 133 Berrall Way, Billingshurst, England, RH14 9PQ (registered in England and Wales, company number 17361684) ("we", "us", "RouteRound", "the Processor").

This agreement sets out the terms on which we process personal data on your behalf, as required by Article 28 of the UK GDPR. It forms part of, and is subject to, our subscription terms. Where this agreement and the subscription terms conflict on data protection, this agreement wins.

Version: 1.1, effective 15 August 2026

What changed in 1.1: clause 8.6 now names the OpenStreetMap Foundation and what the tree-preservation-order map discloses to it. Nothing was removed and no obligation of ours was narrowed — this is a disclosure that was already happening, was already described in our Privacy Notice, and should have been in this clause and on the sub-processor list from the start. It was not. Version 1.0 was therefore incomplete rather than wrong, and this is the correction.


1. Who is who

1.1 For all personal data you or your users enter into RouteRound about your staff, your customers, your customers' contacts and the sites you work on — you are the controller and we are the processor. You decide what goes in, why, and how long it stays. We act only on your instructions.

1.2 For the personal data we hold about you as a subscriber — the account holder's name and email address, sign-in credentials, organisation name, member roles, invitation records, billing details and our own service logs — we are the controller. That processing is described in our Privacy Notice and is not governed by this agreement.

1.3 Where you invite a colleague into your RouteRound organisation, that colleague's email address and role are processed by us in both capacities: as processor for your organisation's member list, and as controller for their own sign-in account.

1.4 You confirm that you have a lawful basis for every category of personal data you put into RouteRound, that you have given the required privacy information to the people concerned, and that your instructions to us will not put us in breach of UK data protection law.


2. Subject matter, duration, nature and purpose

2.1 Subject matter. Our provision of the RouteRound field-service scheduling service to you.

2.2 Duration. From the start of your subscription until it ends, plus the return-and-deletion period in clause 10.

2.3 Nature and purpose of the processing. We process personal data only to provide the service, that is to:

We also take payment for your subscription and manage it, using Stripe's hosted checkout and customer portal, and we record against your account which subscription you hold and whether it is current. We do that as controller under clause 1.2, not on your behalf, so it is described in our Privacy Notice rather than governed by this agreement. It is named here so that the list above is not read as an account of everything we do.

2.4 We do not use your data to train models, to build profiles, for our own analytics, or for marketing. RouteRound contains no analytics or advertising code.


3. Types of personal data

The following categories are processed, drawn from what the software actually stores:

About your customers and their sites

About your staff and operatives

About your portal users

About your business and its documents

Technical records stored alongside the above

3.1 Special category data. RouteRound is not designed for and does not request special category data under Article 9. You must not enter health information, biometric data used for identification, or identity documents into notes, form fields or certificate photographs. If you do so anyway, you remain solely responsible for meeting the Article 9 conditions and for any resulting DPIA.

3.2 Criminal offence data. An earlier draft of this document said this was "not requested and not supported". That was wrong, and we are correcting it rather than leaving it to be discovered.

RouteRound does not hold the content of a criminal record, and there is no field for an offence, a caution or a disclosure. But it does have a first-class field for whether a named individual holds a criminal-records clearance, and the interface asks for it directly. A compliance requirement carries a kind, one of which the app labels "Vetting / clearance" and which the source describes as covering DBS Basic and Enhanced, NPPV, BPSS and CTC. The box in which you name the requirement ships with the placeholder "e.g. DBS Enhanced". A requirement is satisfied by a matching entry on a named person's qualification record, and a qualification can carry a photograph or scan of the certificate or card.

Recording that an identified person has, or has not, been vetted — and holding a scan of the certificate that says so — is personal data relating to criminal convictions and offences within Article 10 of the UK GDPR, as extended by section 11(2) of the Data Protection Act 2018. If you use this feature, and it is one of the things the app is for:


4. Categories of data subject


5. Your instructions

5.1 We process personal data only on your documented instructions, including on transfers, unless we are required to do otherwise by law. If we are, we will tell you before processing unless that law forbids us from telling you.

5.2 Your documented instructions are: this agreement, the subscription terms, and your use of the features of the service. Turning a feature on is an instruction to carry out the processing that feature performs — for example, adding a client share instructs us to publish that schedule and, unless you switch notifications off for that customer, to email them when it changes.

5.3 If we consider an instruction to infringe UK data protection law, we will tell you without delay. We may suspend the affected processing until it is resolved.

5.4 You may change or withdraw instructions in writing to privacy@routeround.co.uk. Where a change requires work outside the normal running of the service, we may charge a reasonable fee, and we will tell you before doing anything chargeable.


6. Security measures

We take appropriate technical and organisational measures under Article 32. Set out below is what is actually implemented, so that your assessment is based on fact.

6.1 What is in place

Separation between accounts. Row-level security is enabled on every table in the database, and access rules are enforced by the database itself rather than only by the application. A signed-in user can read and write their own account's backup and nothing else; members of an organisation can reach only their own organisation's shared data. Portal users can only read the schedule published to them — they cannot write to it at all. They do have three narrow write paths, which we set out rather than round down to "read-only": a request inbox they can add to but never edit or delete afterwards; the first- and last-seen timestamps on their own portal record, which the portal stamps automatically when they sign in; and, where a portal user is an owner of their portal account, the member list of that account — an owner can add, re-role and remove the other email addresses on it.

No separation inside an organisation. The boundary above is the only one there is, and we would rather say so than let the paragraph above be read as more than it is. Within a shared organisation the database rules key on bare membership, not on role: the read policy on the organisation's backup and the read policy on its storage folder both ask only whether the user is a member. So every member, including one you have given the lowest "field" role, can read the organisation's entire backup and every file in its folder — your customers' contact details, access notes containing gate and key-safe codes, every staff member's certificate and clearance scans, drawn signatures, quotes and invoices. Roles change what the app shows someone (they hide sales, data tools and settings) and not what the database will hand over, and every role may push changes to the shared copy. Joining an organisation also pulls the whole shared dataset, files included, down onto the joining member's device, where — see clause 6.2 — it is not separately encrypted by the app. If you have people who should not see all of it, the only control the software actually offers is a separate organisation, and you should assume when assessing this that anyone you add can see everything.

File isolation. Photographs, signatures and certificate scans are held in a private storage bucket, never a public one, in folders named after the account or organisation that owns them, with the same row-level rules applied to file access.

Server-side privileged key. The database's privileged service-role key exists only in our server environment. It is never included in the code sent to a browser. Five server functions use it: publishing a schedule, accepting a team invitation, deleting an account, starting or managing a subscription, and receiving payment events from Stripe. The first four verify the caller's session token before doing anything, and act only on data belonging to the caller's own account — with one deliberate exception. When you publish a schedule to a customer, the publishing function also creates, for the email address you nominate, a portal sign-in account and a customer record if they do not already exist, and emails that address. That is the client-portal feature described in clause 2.3 doing what you asked it to; it is rate-limited, but it is action taken on an identity other than your own, at your instruction. The Stripe webhook cannot verify a session — Stripe holds none with us — so it is authenticated instead by verifying Stripe's signature over the raw request body, before that body is parsed, and anything failing that check is rejected without reaching the database.

Passwords a subscriber sets for their customers. A subscriber can issue an initial portal password to a customer they share with, so that customer can sign in without waiting for an emailed link. What is implemented, precisely: the password is generated by the server, never chosen or typed by the subscriber; it is returned to them once and is not stored anywhere — not in the database, not on the device, not in any backup — so the only record is the date it was issued and which subscriber account issued it; the server refuses the operation for any address that already uses RouteRound in its own right — one that has published a schedule, holds a subscription, has a backup of its own, belongs to a shared organisation, or has an unaccepted invitation to join one — and also for any address another subscriber already shares with, so it cannot be used to obtain a credential on somebody else's account; a password is likewise retired automatically if the address later accepts an invitation to join an organisation, so one issued before that point cannot be used afterwards; it is refused outright once the customer has chosen their own password, so it cannot be used to lock them out; it is retired when the subscriber stops sharing with that customer; and when a subscriber deletes their RouteRound account, every password they issued that the customer has not yet replaced is rotated to an unknown value. Whether the customer has replaced it is recorded by a database trigger on the authentication table, not by anything the browser can assert.

Two things this is not, stated because the difference matters to your assessment. The customer is shown a notice when they sign in, telling them their contractor set the password and how to replace it — that is a user-interface disclosure, not an access control, and it can be dismissed. And issuance is rate-limited to six per minute per subscriber, in memory, per server instance — a brake on a stuck finger, not a guarantee.

Identity checks on privileged operations. Accepting a team invitation requires a valid, unexpired, unused token and that the accepting user's signed-in email address matches the invited address. Ownership of an organisation can never be granted by invitation.

Encryption in transit. All traffic uses HTTPS. Responses carry HTTP Strict Transport Security with a two-year max-age including subdomains, a Content Security Policy that enumerates the only external hosts the browser may contact, and X-Frame-Options: DENY, X-Content-Type-Options: nosniff and a restrictive Permissions-Policy.

Encryption at rest. Data in our database and file storage is encrypted at rest by our infrastructure providers as standard. Rather than ask you to take that on our word, here is the supplier's own commitment: Supabase, which holds both the database and the files, states that "all customer data is encrypted at rest with AES-256" and in transit via TLS (supabase.com/security). We do not operate customer-managed keys.

Rate limiting. Every server function that touches personal data applies a per-user request limit, keyed on the signed-in user id. The only per-IP limit in the service is on the unauthenticated tree-preservation-order lookup, which has no signed-in user to key on. The completion-report email path has both a tighter per-minute limit and a deployment-wide daily ceiling. The invitation-email path has neither: it runs under the same general per-user limit as the rest of that function, so the protection against a compromised session sending mail in volume from our verified domain is weaker there than on the report path. All of these limits are held in memory per function instance, which makes them a first line of defence rather than a hard cap. As at 25 August 2026 no provider-side send cap is configured at Resend, and the invitation path still has no limit of its own. We would rather record that than describe the in-memory limits as though they were a ceiling. Both are on the list to change; until they are, the honest description of the invitation path is the one above.

What the client portal publishes — and to whom. A portal share is scoped to a team, not to a customer. Publishing to one customer therefore gives that customer the whole of that team's schedule: every active site's name, street address and postcode, and every dated visit and its status — including the sites of your other customers. There is no per-site filter; the customer's name and email are the viewer's label and login, nothing more. The app's own sharing screen says the same ("they'll see this team's whole schedule"), and we repeat it here because clause 4 records that a site address can identify an occupier. If two customers must not see each other's work, they have to be on separate teams.

What a portal share does leave out is your free-text job notes, money, and anything belonging to another team; completion records in the portal carry a paperwork summary and a photograph count rather than the notes themselves.

One free-text field does leave, and by email rather than to the portal. The per-visit "Note for the client" is carried into the schedule-change email, in brackets after each new or moved visit. Because a share is scoped to a team and not to a customer, that email reports the whole team's changes — so every notified customer receives the notes written on your other customers' visits too, alongside those sites' names and dates. A note such as "no access — occupier in hospital, key with the neighbour" therefore reaches people with no connection to that site. Treat that field as text any of your customers may read, and put nothing in it you would not send to all of them.

The emailed completion report is a different and much fuller document, and nothing said above about the portal describes it. It goes out in two parts, and an earlier draft of this clause described only a fraction of the second.

The email body carries the names of the crew who attended, each crew member's certificates with expiry dates and an "EXPIRED" flag where one has lapsed, the free-text job notes in full under "Work done", any skip reason, any record of paperwork being overridden and the reason given, and the site's postcode.

The attachment is not "the photographs". By default it is a single file, completion-report.pdf, which is a page-image render of the entire Proof-of-Service sheet exactly as it appears on screen. In addition to everything in the body, that sheet carries: the staff check-in and check-out GPS coordinates, to five decimal places; every drawn signature image on the job — the client's sign-off, the risk-assessment assessor's, the waste-transfer transferor's and transferee's, and the operator who signed an equipment or vehicle check; photographs of the crew's qualification certificates; the site's address and what3words; the customer's contact name and phone number; the vehicle registration and odometer reading; the waste-transfer counterparty names, addresses and permit numbers; and the before-and-after job photographs themselves. Before-and-after photographs are attached instead of the PDF, and only when the PDF fails to generate, capped at eight. Attachments are capped in total at twelve files and 8 MB, and a report goes to as many as five email addresses the sender types — any addresses at all.

Clause 3 lists location data, drawn signature images and certificate scans among the most sensitive things this product holds, and clause 3.2 warns that a certificate scan can be Article 10 criminal-offence data. All three leave in that attachment. Sending a report is your instruction under clause 5.2. It is your decision whether a given recipient should receive that much about your staff and that site.

Refusal to overwrite. Synchronisation refuses to write over a cloud copy newer than the one a device last saw, and refuses to sync at all if the device's data belongs to a different account — so one user's data cannot be filed under, or destroyed by, another's.

Offline-first design. Your working data lives on your device. The service can be used entirely without a cloud account, in which case none of your schedule, photographs, staff records or customer records reaches our servers. Three qualifications, so this is not read as "nothing leaves the device": a tree-preservation-order check sends the site's coordinates through our server function to the national Planning Data platform; the lookups in clause 8.6 go from your browser straight to those providers, whether or not you have a cloud account; and opening a Navigate link — or a link on a printed or copied day sheet — sends Google the site's coordinates, or, for a whole day's round, your depot and every stop on it. That last one needs no API key and no cloud account and is live on every install.

6.2 What is not in place

We would rather you learn this here than in an incident:

6.3 Organisational measures


7. Confidentiality

7.1 We keep personal data processed under this agreement confidential.

7.2 Everyone we authorise to process it is bound by a duty of confidence, whether by contract of employment, contractor agreement or professional obligation, and that duty survives the end of their engagement.

7.3 We limit access to those who need it to provide the service or to support you.


8. Sub-processors

8.1 General authorisation. You give us general written authorisation to engage sub-processors, subject to this clause.

8.2 Current list. The sub-processors we use, what data reaches each of them and why, are set out in SUB-PROCESSORS.md, which forms part of this agreement.

8.3 Terms we impose. Before a sub-processor handles personal data we put a written contract in place imposing obligations no less protective than those in this agreement, including confidentiality and Article 32 security. Where we stand as at 25 August 2026. Supabase, Netlify and Resend each publish a data processing agreement that applies to accounts of our kind, and those documents have been read and are cited on the sub-processor list. What we have not yet done is complete each provider's own acceptance step where one exists and record the date, and — for Stripe — nothing needs accepting separately. Stripe's DPA (version dated 18 November 2025) opens "This Data Processing Agreement is subject to and forms part of the Agreement", the Agreement being the Stripe Services Agreement accepted when the account was opened, and clause 1 provides that a Stripe account outside the Americas enters that DPA with Stripe Payments Europe, Limited. It has therefore been in force since the account existed, including on the afternoon of 25 August 2026 when billing went live. What was outstanding was the record, not the agreement — checked and corrected on 26 August 2026. We would rather show you the gap than describe a filing cabinet we do not have.

8.4 Liability. We remain fully liable to you for a sub-processor's performance of its data protection obligations.

8.5 Changes. We will give you at least 30 days' notice before adding or replacing a sub-processor, by email to your account address and by updating the list. If you reasonably object on data protection grounds within that period, we will work with you in good faith; if we cannot resolve it, you may terminate the affected part of the subscription without penalty for the unused period.

8.6 What your browser sends directly, and what each party receives. Some of the third parties listed are contacted by your browser, not by our servers. We list them as sub-processors for transparency even where we never hold the data ourselves — but "we never see it" is not the same as "it is not disclosed", so here is what each one gets:

Two clarifications on that last entry, because it does not sit in the same box as the rest of this clause. First, the OpenStreetMap Foundation is not our processor and does not act on our instructions. It publishes a standing refusal: there is no controller-to-processor relationship between an embedder and the Foundation, and using its services does not create one. So we cannot pass your instructions to it, we cannot bind it under clause 8.4, and we cannot usefully route a data subject's request to it — it states that the transience of its logs generally makes access requests infeasible to fulfil. Second, it is a UK body — a company limited by guarantee registered in England and Wales, number 05912761 — but its tiles are served over a global content delivery network, and its privacy policy expressly excludes data associated with a tile request from the commitment it gives about storing personal data in the United Kingdom and the Netherlands. For that data it publishes no location, no retention period and no transfer mechanism. We record it here rather than under clause 13 because it is a disclosure to another controller, not a transfer we make as your processor.

Tree-preservation-order and conservation-area checks are the exception: they go through our own server function, which forwards the site's coordinates to the national Planning Data platform. That request carries no account identifier and is not authenticated, but the coordinates do pass through us. Note that the boundary check and the map drawn behind it reach different parties by different routes — the check goes through us to a UK Government service, the tiles go straight from the browser to the OpenStreetMap Foundation — so a customer content with one has not thereby agreed to the other.


9. Assistance to you

9.1 Data subject requests. Taking account of the nature of the processing, we will assist you by appropriate technical and organisational measures in responding to requests to exercise rights under Chapter III of the UK GDPR.

In practice:

9.2 DPIAs and prior consultation. We will provide reasonable assistance with a Data Protection Impact Assessment or a prior consultation with the ICO, taking into account the information available to us. This document, the sub-processor list and the retention schedule are intended to give you most of what you need.

9.3 Security, breaches and Article 32. We will assist you in ensuring compliance with Articles 32 to 36. You should know that our ability to tell you precisely which records were accessed in an incident is limited, because we do not operate audit logging. In an incident we will provide what our providers' infrastructure logs contain and will be explicit about what we cannot determine, rather than understate the scope.


10. Deletion and return

10.1 On the end of your subscription, at your choice, we will delete or return your personal data. Unless you tell us otherwise within 30 days of termination, we will delete it.

10.2 Return. You can produce an export yourself at any time, before or after termination, using the in-app backup export. As clause 9.1 explains, that file covers the working data held on the device it is taken from — including photographs — but not the personal data that exists only on our servers: portal sign-in timestamps, the content of portal requests, portal member lists, the backup snapshot history, and the device string and pushing member recorded on each backup. Ask us and we will produce the rest, at no charge.

10.3 Deletion — how this actually works today. Be aware of the following, which we state plainly because it affects your own compliance:

What you can start without us is deletion of the whole account. That runs from inside the app, at any time, and it takes the cloud backup and its snapshot history, the stored files and the mirrored portal data with it. Read clause 9.1 for the order it works in, for the fact that it refuses before touching anything where a shared workspace would be stranded, and for the three things it does not reach — your customers' portal sign-in accounts, our payment provider's record of you, and our providers' own automated backups. Ending your subscription does not by itself delete anything — cancellation only changes your subscription status, so if you want the data gone you must either delete the account or instruct us. Where you ask us to do it instead, or where what you need erased is narrower than a whole account, it is a manual procedure carried out by an operator in the provider's administration console, documented step by step in our internal retention and erasure procedure. Two different periods apply, and we would rather be held to both than to an average of them:

In both cases we confirm in writing when it is done, and say what was retained under clause 10.4 and why.

10.4 We may retain personal data where UK law requires it, for as long as that law requires and for no other purpose. This includes records you may be legally required to keep — waste transfer notes for two years, hazardous waste consignment notes for three years, and pesticide application records for three years. Tell us if any of your data falls into these categories before instructing deletion.

10.5 Backups. Deleted data may persist in our providers' automated backups until those backups expire on their own cycle. What that comes to for our database is narrower than an earlier draft of this clause said, and we would rather correct it than leave the softer sentence standing. On the Supabase Free plan there are no automated daily backups at all — the provider's own documentation tells free-plan projects to export their data themselves — and point-in-time recovery cannot be enabled, because it is a paid add-on. Daily backups begin at seven days' retention on the Pro plan and fourteen on Team (supabase.com/docs/guides/platform/backups). So on the Free plan there is no provider backup for a deleted row to survive in — and, in the other direction, none to restore from either. Confirmed on 25 August 2026: the project is on the Supabase Free plan, so this clause describes our actual position rather than an assumed one.


11. Breaches

11.1 We will notify you without undue delay after becoming aware of a personal data breach affecting personal data we process for you, and in any event within 24 hours of becoming aware of it, so that you can meet your own 72-hour deadline to the ICO.

11.2 Our notification will describe the nature of the breach, the categories and approximate number of data subjects and records affected so far as we can determine, the likely consequences, the measures taken or proposed, and a contact point. Where we cannot determine something — in particular the precise scope, given clause 6.2 — we will say so explicitly rather than estimate.

11.3 We will not notify the ICO or any data subject on your behalf unless you instruct us to in writing.

11.4 Our full step-by-step response is documented in our internal breach procedure, which we will share with you on request.


12. Audit

12.1 We will make available to you all information reasonably necessary to demonstrate compliance with Article 28, and will allow for and contribute to audits, including inspections, conducted by you or an auditor you mandate.

12.2 In the first instance we will satisfy an audit request by providing this agreement, the sub-processor list, the retention schedule, our breach procedure and written answers to your security questionnaire. We do not hold a SOC 2 report or an ISO certificate to offer in place of that.

12.3 An on-site or systems inspection may be requested no more than once in any twelve months, unless a breach has occurred or the ICO requires it, on 30 days' written notice, during business hours, subject to confidentiality, and without unreasonable disruption. You bear your own costs and our reasonable costs.

12.4 We will not give an auditor access to data belonging to our other customers, or to credentials.


13. International transfers

13.1 We will not transfer personal data outside the UK except in accordance with Chapter V of the UK GDPR, using UK adequacy regulations, the UK International Data Transfer Agreement, or the UK Addendum to the EU Standard Contractual Clauses.

13.2 Where the data actually sits. Our database and file storage run on a Supabase project hosted in AWS eu-west-3 (Paris, France). Your data at rest is therefore in the EU, not in the UK, and we do not claim UK-only hosting anywhere in this pack. The transfer from the UK to the EEA is covered by the UK's adequacy regulations for the EEA, so for that leg we rely on adequacy alone: no International Data Transfer Agreement, no standard contractual clauses and no transfer risk assessment are required or claimed for it.

13.3 Two things the hosting region does not settle, which we separate deliberately.

For every sub-processor, the contracting entity, the country of processing and the mechanism relied on are set out in SUB-PROCESSORS.md.

13.4 Where a transfer mechanism requires a transfer risk assessment, we will carry one out and make it available to you on request.


14. General

14.1 Term. This agreement runs for as long as we process personal data for you.

14.2 Liability. Liability under this agreement is subject to the limits and exclusions in the subscription terms, except where UK data protection law does not permit them to apply.

14.3 Changes. We may update this agreement where the law changes or where the service changes materially, on 30 days' notice. If a change materially reduces your protection you may terminate without penalty for the unused period.

14.4 Governing law. The laws of England and Wales, and the exclusive jurisdiction of the courts of England and Wales.

14.5 Precedence. In the event of a conflict, this agreement prevails over the subscription terms on matters of data protection.


Signatures

The Customer Desultory Ltd
Name
Position
Date
Signature

How this agreement is executed is a commercial decision rather than a data protection one, and it is not settled. A click-accepted schedule to the subscription terms is normal for a business of this size and takes the signature bottleneck out of every sale; a countersigned copy closes more slowly, but some facilities-management buyers will not proceed without one, so the choice sets how every deal closes. Decided on 25 August 2026: a click-accepted schedule to the subscription terms. It matches how the product already works — the checkout collects an explicit terms acceptance, timestamped by Stripe against the transaction, and this agreement forms part of those terms. A countersigned copy remains available on request to any buyer whose process requires one; ask at jack@routeround.co.uk and we will sign and return it.