Privacy Policy

Last updated: 14 October 2026

Perfect Pitch is a singing and ear-training app for iPhone, iPad and the web (www.myperfectpitch.app), operated by Aya Labs B.V., Reinwardtstraat 70, 1093 HL Amsterdam, the Netherlands ("we", "us"). This policy explains what personal data we collect when you use Perfect Pitch, why we collect it, who we share it with, how long we keep it, and the choices you have. Aya Labs B.V. is the data controller. You can reach us at hello@ayalabs.xyz.

Data we collect

How we use your data

Google user data (your name, email address and profile picture) is used to create your Perfect Pitch account, sign you in, show your name in the app, and send you the emails described in this policy. We do not use it for advertising and we do not sell it. We share it only with these service providers: Supabase (database and sign-in), Resend (sending emails), and RevenueCat and Stripe (your email address, when you buy on the website). From version 1.5.8 of the iOS app, and on the website, we do not send it to Amplitude or to any other analytics or advertising provider; for earlier versions, see What earlier versions sent. Our use of information received from Google APIs adheres to the Google API Services User Data Policy, including the Limited Use requirements.

Who we share data with

We do not sell your personal data. We share it with the service providers below, which process it on our behalf and only on our instructions, and with a few companies that decide for themselves how they use it: Apple and Google when you sign in with them, Apple when you buy through the App Store, and Google when it measures our ads. Stripe processes card payments on the website for us, and also uses payment data for its own purposes, such as preventing fraud and meeting its legal duties.

ProviderPurpose
SupabaseDatabase, sign-in, server functions, and hosting of files and lesson videos
AppleSign in with Apple, App Store purchases, push notifications and Apple Search Ads attribution on iOS
Google (Sign in with Google)Signing you in, if you choose it
RevenueCatSubscriptions, purchase records and checkout on the website
StripeCard payments on the website. Stripe also uses payment data for its own fraud prevention and legal duties.
Superwall (United States)Showing and testing the subscription screen in the iOS app, not for users in child mode (with one exception)
Google FontsA font on the subscription screen shown through Superwall in the iOS app
AmplitudeProduct analytics and session recordings. Our apps send it nothing in child mode (see Children). On the website in the EEA, the UK and Switzerland, it runs only if you allow analytics (see Cookies).
Google Firebase (Crashlytics)Crash reports from the iOS app
Google Analytics and Google AdsWebsite analytics and advertising measurement (see Cookies)
VercelWebsite hosting and measuring how fast pages load (Speed Insights)
ResendSending emails and telling us whether they were delivered
ContentfulDelivering blog posts and their images
jsDelivrLoading the pitch detection model for the Audio to MIDI tool on the website
Your browser's push service (for example Google, Apple, Mozilla or Microsoft)Delivering notifications on the web
MixpanelWebsite analytics and session recordings until October 2026. We no longer use it.

We may also disclose data if required by law, to enforce our Terms of Service, or to prevent fraud and protect the security of the service. If Aya Labs B.V. is involved in a merger or sale, your data may be transferred as part of that transaction.

International transfers

Supabase stores our database in Frankfurt, Germany, and Amplitude stores our analytics data in its EU data centre. Other providers in the table above, such as Superwall, RevenueCat, Firebase, Google, Resend and Vercel, may process data outside the European Economic Area, mainly in the United States. For those transfers we rely on the EU-US Data Privacy Framework where the provider is certified under it, and otherwise on the European Commission's Standard Contractual Clauses. You can ask us at hello@ayalabs.xyz for a copy of the safeguards for a specific provider.

How long we keep data

We keep personal data only for as long as we need it for the purposes in this policy:

DataHow long
Account, profile and learning dataAs long as your account exists. When you delete your account, we delete it from our database straight away and from our database backups within 30 days.
Guest profiles (no account, including users in child mode who have no account)We delete a guest profile automatically once it has not been used for 12 months. Opening the app or the web app with it starts the 12 months again. Only what you do counts as use: reminders or other messages we send do not restart the 12 months. The cleanup runs every night, so a guest profile is deleted within a few days after the 12 months end. We delete it the same way as an account: from our database straight away and from our database backups within 30 days, and we ask RevenueCat and Amplitude to delete their data about it. We do not delete a guest profile this way if it has a purchase, a subscription or a free trial, took part in a referral, or if we have an email address for it; we keep those until you ask us to delete them. You can ask us to delete any guest profile at any time.
Purchase recordsIn our database and at RevenueCat: until you delete your account or guest profile. If a website subscription is still renewing when you delete your account, or the RevenueCat record is also linked to another account, RevenueCat keeps that record. Payment records for website purchases in our Stripe account: 7 years after the purchase, because Dutch tax law requires it. Apple keeps its own records of App Store purchases.
Usage data in Amplitude24 months. When you delete your account, or we delete an unused guest profile, we ask Amplitude to delete all data about you, which Amplitude does within 30 days. For users who tell us they are under 13, we ask for this deletion once their answer has reached our servers. You can also ask us to delete your Amplitude data at any time.
Session recordings (Amplitude)30 days, unless we save a recording to look into a problem. A saved recording stays until we remove it.
Crash reports (Firebase Crashlytics)90 days.
Data Superwall receivesWe have not yet agreed a deletion period with Superwall. Deleting your account does not reach Superwall automatically. Email us and we will ask Superwall to delete the data linked to your account and device.
Google AnalyticsAt most 14 months for data linked to cookies or user IDs.
Data Mixpanel collected on our websiteWe will delete it in Mixpanel by 31 December 2026. You can ask us to delete your data there sooner.
Records of the emails and notifications we sent youAs long as your account or guest profile exists. Resend, which sends our emails, keeps its own log of each email for 30 days.
The email address you left for your voice reportAs long as the guest profile or account it was left with exists, also after you unsubscribe. We have not yet set an automatic deletion period for it; we delete it on request.
Unsubscribes and spam complaintsWe keep the email address and the reason after you delete your account, for as long as we send emails, so that we never email that address again.
Push tokensUntil you delete your account or guest profile. We stop using a token as soon as it stops working.
Referral recordsThe invitation code and the link between the two accounts: until either account is deleted. The record of a reward: kept after either account is deleted. It holds our internal IDs for the two accounts, not a name or email address. We have not yet set an automatic deletion period for it; we delete it on request.
Support emails and feedback24 months after we receive them. Feedback sent in the app, and any screenshot attached to it, is deleted sooner if you delete your account or we delete your guest profile. You can ask us to delete support emails sooner.
Technical logs at our hosting providers (Supabase, Vercel), which include IP addressesUp to 30 days.

Your choices and rights

Cookies and similar technologies

The website and web app store a few things in your browser that they need to work: your sign-in, your settings and progress, your cookie choice, and whether child mode is on. These are always on. Two other kinds depend on your choice:

In the EEA, the UK and Switzerland, both start off and a banner asks you first. We decide where to show the banner from your device's time zone, and Google also applies this default from its own location lookup. Because the time zone decides, the banner also appears, with both choices off, for European time zones outside these countries (for example in Turkey or Ukraine) and on devices whose time zone names no country, such as UTC. Until you allow analytics, Amplitude does not start: it stores nothing in your browser and receives nothing from the website, and what you did before you allowed it is never sent later. Until you allow analytics or advertising, the website does not load Google's tag at all, so Google receives nothing from it. If your device's time zone is outside Europe while you are in one of these countries, the tag does load, but Google's own location lookup keeps all its storage denied: it sets no cookies and receives only basic signals without cookies or ad click identifiers. Amplitude has no such lookup, so in that case it runs as it does elsewhere until you turn analytics off. Everywhere else both start on, and you can turn them off.

Amplitude does not run in child mode (see Children). It uses Amplitude's EU data centre. It keeps an identifier for your browser, and where your visit came from, in cookies, and events waiting to be sent in your browser's storage. When you turn analytics off, Amplitude stops and the website deletes Amplitude's cookies and what it stored in your browser (in Firefox before version 126, some of it stays until you clear the site's data). If you allow analytics again, Amplitude gets a new identifier for your browser. Vercel, which hosts the website, measures how fast pages load (Speed Insights) for every visitor.

You can change your choice at any time under Cookie settings: in the website footer, in the web app's side column and Settings, or at www.myperfectpitch.app/#cookie-settings. Your choice stays in your browser until you change it or clear your browser data. Once child mode is on, Google's tag is switched off and does not load again in that browser, and no banner is shown (see Children for what can be sent before that). We do not use cookies to build advertising profiles for sale to third parties.

Automated decisions

We personalise lessons to your voice range and progress, but we do not make decisions based solely on automated processing that have legal or similarly significant effects on you.

Additional information for US residents

Depending on the state you live in (for example California), you may have the right to know what personal information we collect, to access, correct or delete it, and to opt out of the "sale" or "sharing" of personal information or of targeted advertising. We do not sell personal information for money. Where our use of advertising measurement tools counts as "sharing" under your state's law, you can opt out under Cookie settings on the website or by emailing us. We will not discriminate against you for exercising these rights. To make a request, email hello@ayalabs.xyz; we may need to verify your identity through your account email. In the last 12 months we have collected the categories of information listed under "Data we collect" above, from you directly and from your use of the app, for the purposes listed under "How we use your data", and disclosed them to the service providers listed above.

Children

Perfect Pitch asks everyone for their age during setup. We keep only the age group, which we use to suggest a comfortable starting vocal range. From version 1.5.8 of the iOS app, and on the website, our apps do not send anyone's age or age group to our analytics, subscription or advertising providers. Earlier versions did (see What earlier versions sent). Children under 13 should use Perfect Pitch only with the permission of a parent or guardian (see our Terms).

If you tell us you are under 13, the app and the website switch to child mode. You keep using Perfect Pitch and see the same plans and prices, but:

Some data is still needed for the app to work. Progress, scores, settings and the age group are stored on our servers at Supabase under a guest ID. RevenueCat receives the guest ID and what it needs to show plans and handle purchases, and in the iOS app also Apple's attribution information if the app was installed from an Apple Search Ads ad. If the iOS app crashes, Firebase Crashlytics receives a crash report without any name, email address or age. If notifications are allowed, the app can send practice reminders and messages about the child's own subscription, such as a trial that is ending or a payment problem. Purchases in the iOS app are handled by Apple, and Apple's Ask to Buy can send them to a parent or guardian to approve first.

The age question comes a few screens into setup, so Amplitude may already have received usage data from those first screens and, for some sessions, a recording of them. Data that was waiting to be sent at that moment can still arrive. On the website, Google Analytics and Google Ads may also have received page views and, where cookies were allowed, ad click information from those first screens. The same can happen once when a child's profile is opened in a new browser, before the profile has loaded. From then on they are switched off. We ask Amplitude to delete all data about users who tell us they are under 13, once their answer has reached our servers. Child mode stays on for that device or browser, and a later answer does not switch it off. It also starts when someone uses an account or guest profile whose age group is under 13. If the app is deleted or the browser data is cleared, child mode starts again when the age question is answered with an age under 13.

If an account of someone who told us they are under 13 already had an email address before child mode existed, we only send it messages about its own subscription, such as a renewal reminder or a payment problem.

A parent or guardian can ask us to see or delete a child's data by emailing hello@ayalabs.xyz.

Security

We use encryption in transit, access controls and reputable infrastructure providers to protect your data. No method of transmission or storage is completely secure, so we cannot guarantee absolute security.

Changes to this policy

We may update this policy from time to time. We will post the new version on this page and change the date above. If the changes are significant we will tell you in the app or by email.

Contact

Aya Labs B.V.
Reinwardtstraat 70
1093 HL Amsterdam
the Netherlands
Chamber of Commerce (KvK) number 85595020
VAT number NL863677460B01
hello@ayalabs.xyz