Privacy Policy

How Measura collects, uses and protects personal data, written to match what the system actually does.

1. Scope of this policy

This policy explains how Safli Technologies Ltd (“Measura”, “we”, “us”) handles personal data in the Measura mobile measurement platform. It covers the Measura SDKs, the event ingestion and attribution services, the deep link redirector, and the developer and administrator dashboards.

Two audiences are addressed. If you are a customer, meaning a company that has integrated our SDK, sections 2 through 12 describe what we do with data collected through your app. If you are an end user of an app that uses Measura, section 13 explains your rights and how to exercise them.

If you sign in to a Measura dashboard with your Google account, section 14 explains exactly what Google shares with us and how we handle it.

2. Our role: processor and controller

For data collected through a customer’s app, Measura acts as a data processor. The customer decides what to collect and why, and we process it on their documented instructions. The customer is the controller and is responsible for having a lawful basis and for giving notice to their users.

For a limited set of platform level processing, principally fraud detection signals evaluated across our whole customer base, and for account data belonging to our own customers, Measura acts as a controller.

3. What the SDK collects

Measura ships a single SDK, for Android. The following fields are sent with every event.

event_typestring
The kind of event, for example install, open, session start or purchase.
timestampinteger
When the event occurred, from the device clock.
sent_atinteger
When the request was signed. Used to reject replayed requests outside a ten minute window.
customer_id, app_iduuid
Which customer and which application the event belongs to. Resolved from the API key, not supplied by the device.
event_idstring
A generated identifier used to deduplicate retried events.
sdk_versionstring
The SDK version that produced the event.
device_model, os_name, os_version, app_versionstring
Device model, platform, operating system version and the host application version.
device_fingerprint_componentsobject
Device model, operating system version, screen resolution, application version, and a user agent string that the SDK constructs itself. This is not the browser user agent and contains no browsing history.
signaturestring
A cryptographic signature over the payload, proving it came from a holder of the customer’s secret.

Fields sent only in specific circumstances

FieldWhen it is sent
event_propertiesOnly when the app developer attaches properties to an event. The contents are chosen entirely by the app developer, not by Measura.
revenue, currencyWhen a purchase event carries a monetary value.
user_idOnly after the app developer calls identify(). See section 5 for an important limitation.
referrerOnce, on first launch. The install referrer string provided by the app store, which carries the click identifier through the install.
click_idWhen the install can be traced to a Measura link the user opened.

4. What we add on our servers

Three things are recorded by our servers rather than by the SDK.

  • A masked IP address. We take the source address of the request and truncate it before storage. IPv4 addresses lose their final octet, becoming a /24 network. IPv6 addresses are truncated to a /48 block. The full address exists only in memory for the duration of the request.
  • The HTTP user agent header. Used for fraud signals such as detecting automated clients.
  • A computed fingerprint hash. A one way hash of the masked IP address, user agent, device model, screen resolution and operating system version, used for probabilistic matching when no deterministic identifier is available.

5. What we do not collect

Stated explicitly, because the absence is as important as the presence.

  • No location data. No GPS, no coarse location, and no IP based geolocation lookup.
  • No contacts, photos, messages, calendar or file access. The SDK requests none of these permissions.
  • No browsing history and no cross app tracking beyond the attribution of a click to an install within a single customer’s account.
  • No hardware identifier. ANDROID_ID, IMEI, MAC address and serial number are never read. The advertising ID, which the SDK does collect by default, is resettable and can be cleared or switched off by the user at any time from system settings.
  • No raw IP address in storage, as described above.

7. How we use the data

PurposeWhat it involves
AttributionMatching an install to the click that preceded it, and computing a confidence score with a written record of the reasoning.
Fraud detectionScoring each event against a set of published rules covering request velocity, automated client signatures, timestamp anomalies and emulator indicators. Flags are recorded for review. Nothing is blocked automatically.
Analytics for the customerAggregating installs, retention cohorts and return on ad spend for display in the customer dashboard.
Postbacks to advertising networksWhere a customer configures it, forwarding conversion notifications to the network that served the ad. See section 9.
Service operationRate limiting, quota metering, debugging and security monitoring.

We do not sell personal data. We do not use customer event data to build cross customer advertising profiles, and we do not share one customer’s data with another.

9. Who we share data with

We use the following sub-processors. Each has a defined role and receives only what that role requires.

Sub-processorPurposeData handled
SupabasePrimary platform: Postgres database, authentication, edge functions, object storage and secret vault.All event, device, attribution and account data. This is the principal store.
CloudflareHosting, DNS and content delivery for the marketing site and both dashboards. Every page is served from Cloudflare Workers.HTTP request metadata including IP address and user agent at the edge. No event, device or attribution data is stored here.
Google (OAuth)Optional single sign-on for dashboard accounts.Authentication assertion containing email address and profile name.
GitHub (OAuth)Optional single sign-on for dashboard accounts.Authentication assertion containing email address and profile name.
ResendTransactional email delivery for team invitations sent from the dashboard.The invited person’s email address, the inviting team name, the assigned role and the single-use invitation link. No event, device or attribution data.
Google (Play Integrity)Device and app attestation, only for customers who enable integrity checking.The Play Integrity token issued on the device, exchanged for a verdict covering app and device recognition and licensing. No advertising identifier.
Google (Firebase Cloud Messaging)Uninstall detection, only for customers who enable it. Token liveness is checked; no message is delivered to the end user.The FCM registration token for the device.

Advertising network postbacks

If a customer configures a postback to an advertising network such as Meta or Google, we send that network a conversion notification when an attribution resolves. This notification includes the event type, attribution and install identifiers, the confidence score, the campaign identifier, and the advertising identifier where one is present.

This transfer happens only when the customer enables it, and the receiving network is an independent controller of what it receives. Customers should review the network’s own terms before enabling postbacks.

We may also disclose data where required by law, or to establish or defend legal claims.

10. How long we keep data

The following windows are enforced by scheduled jobs in our database.

DataRetentionHow it is enforced
Raw events7 to 90 days, configurableRetention is set per account, defaulting to 14 days on Free and 90 days on paid plans. A job at 04:00 UTC drops whole monthly partitions past the 90 day maximum, and a second job at 04:30 UTC removes rows for accounts on a shorter window. Only events that have completed attribution are removed, so an unprocessed backlog is never discarded.
Derived records (devices, clicks, installs, attributions, fraud flags)90 days minimum, or your raw window if longerA job at 05:00 UTC removes derived records once we have held them past the window. Retention is measured from when we received a record, not when the event occurred, so imported historical attribution is not purged on import. A device is only removed once it has no remaining events or installs.
Operational metrics30 daysA scheduled job deletes older rows daily at 03:00 UTC.
Rate limiting counters1 hourA scheduled job clears expired windows every 15 minutes.
Data subject request exports7 days from generationThe export document assembled for a data subject request is the most concentrated copy of one person’s data we hold, so it is not kept once it has served its purpose. A job at 03:40 UTC deletes any export older than seven days and clears the download reference. Re-submitting the request regenerates it from live data within five minutes.
Closed accounts30 days, then permanent deletionClosing an account stops event collection immediately and starts a 30 day window in which it can be cancelled and fully restored. A job at 02:00 UTC permanently deletes accounts past that window, including apps, devices, events, attribution and your end users’ payment records.
Accounting records after closure6 yearsA minimal record of which plan an account held and over which periods survives closure, because section 375(2) of the Companies and Allied Matters Act 2020 requires accounting records to be preserved for six years. It carries no end user data and no contact details, is not readable by any customer account, and is deleted automatically once the six years elapse.

Account and billing records are retained for as long as the account is active and afterwards as required for legal and accounting purposes.

11. Where data is stored

Platform data is stored in a managed Postgres database operated by Supabase, in the us-west-2 region (Oregon, United States). Our application layer runs as edge functions on the same platform, and our web properties are hosted on Cloudflare’s global network.

This means personal data collected through your app is transferred to and processed in the United States, outside Abuja, Nigeria. Where a customer’s use of Measura brings data within the scope of the GDPR or UK GDPR, we will put an approved transfer mechanism in place, such as the European Commission’s standard contractual clauses or the UK International Data Transfer Agreement, as part of the data processing agreement for that engagement. Customers with cross-border transfer requirements should raise them before integrating so the right mechanism is agreed up front.

12. How we protect data

The following controls are implemented and in use.

  • IP truncation at ingestion, so raw addresses are never stored.
  • Row level security on every tenant table, enforced by the database itself. Access is scoped by a server controlled identity claim, so one customer cannot read another’s data even if application code were wrong.
  • API keys stored as hashes only. The plaintext key is shown once at creation and cannot be recovered afterwards.
  • Cryptographically signed events. Every event carries a signature computed with a per customer secret, and requests outside a ten minute window are rejected.
  • Advertising network credentials held in a secret vault rather than in application tables.
  • Hardened security headers including a content security policy on both dashboards.
  • An append only administrative audit log recording every administrative change with its previous and new values.

Data is encrypted in transit over TLS, and encrypted at rest by our hosting platform. We do not currently apply application level column encryption on top of that, and we do not claim to.

No system is perfectly secure. If you believe you have found a vulnerability, please report it to security@measura.dev.

13. Your rights

Under Nigeria Data Protection Act 2023 (NDPA) and, where applicable, the GDPR, you have the right to request access to your personal data, correction of inaccurate data, deletion, restriction of processing, portability, and to object to processing. You may also withdraw consent at any time where processing relies on it.

How to exercise them

If you are an end user of an app that uses Measura, direct your request to that app’s operator first. They are the controller of the data and we act on their instructions. If you cannot reach them, contact us at privacy@measura.dev and we will help identify the right party.

If you are a Measura customer, the developer dashboard includes a form for submitting data subject requests on behalf of your users.

You also have the right to lodge a complaint with the Nigeria Data Protection Commission (NDPC) or with your local supervisory authority.

14. Google user data

You can sign in to the Measura developer dashboard with your Google account. When you do, Google shares a small amount of information about you with us. This section covers exactly what we receive, why, where it is kept, who can see it and how to remove it.

What we access

We request only Google’s basic sign-in permissions (openid, email and profile). From them we receive:

  • your email address;
  • your name and profile picture;
  • a Google account identifier, so we recognise you the next time you sign in.

We do not request access to Gmail, Drive, Calendar, Contacts, YouTube, Google Ads or any other Google service, and we cannot read any of that data. Google also issues a sign-in token; we never use it to call a Google service and we do not store it in our database.

How we use it

  • To create your Measura account and sign you in.
  • To show your name and email address to you, and to members of teams you belong to, so they know who is on the team.
  • To contact you about your account, for example about billing or a change to this policy.

That is all. We do not use Google user data for advertising, we do not sell it, we do not use it to build profiles, and we do not use it to develop, improve or train generalised artificial intelligence or machine learning models. People at Measura do not read it unless you ask us to (for example in a support request), it is needed for security, or the law requires it.

How we store and protect it

It is kept in our authentication database, hosted by Supabase in the United States, encrypted in transit over TLS and at rest. Access is restricted to your own account and to the teams you join.

Who we share it with

We do not sell, rent or share Google user data with third parties. Supabase processes it on our behalf only to run sign-in (see section 9). We will not transfer it to anyone else without your explicit consent, except where the law requires it.

How long we keep it and how to delete it

We keep it for as long as your Measura login exists. To delete it, email privacy@measura.dev from the address you sign in with. We delete your login and everything Google shared with us within 30 days and confirm by email.

You can also remove Measura’s access at any time from your Google Account at myaccount.google.com/permissions. That stops future sign-ins with Google; email us as above if you also want what we already hold deleted.

15. Children's data

Measura is a business to business service and is not directed at children. We do not knowingly collect personal data from children. Customers operating apps aimed at children are responsible for complying with the applicable rules in their market, including obtaining any required parental consent, and should not enable advertising identifier collection in such apps.

16. Changes to this policy

We may update this policy as the platform changes. Material changes will be communicated to customers through the dashboard or by email to the registered billing address. The revision date at the top of this page records the most recent change.

17. Contact us

Questions about this policy, or about how we handle personal data, can be sent to privacy@measura.dev.

Safli Technologies Ltd
RC 9615785
Plot 2 Hunkuyi Close, Garki
Abuja, Nigeria

Privacy and data protection enquiries, including requests to access or delete your data, are handled by our privacy team at privacy@measura.dev.

Was this page useful?

AI tools