Política de privacidad
AdKey — https://adkey.netlify.app
- Última actualización: 2026-08-28
- Versión de la extensión que cubre este documento: 0.1.0
- Contacto: adkeysupport@proton.me
Resumen en una línea
AdKey guarda tus botones de rango de fechas y tus preferencias en chrome.storage.local, o sea en el disco de tu computadora, y no manda nada a ningún lado: no hace una sola petición de red. No hay servidores, no hay cuentas, no hay analytics, no hay telemetría.
1. Qué lee la extensión de la página
Mientras tenés abierta una pestaña de Meta Ads Manager (y solo ahí), AdKey lee tres cosas de esa página. Ninguna de las tres es un dato de tus campañas.
| Qué lee | Para qué | De dónde sale |
|---|---|---|
La zona horaria de la cuenta (un nombre IANA, por ejemplo America/Argentina/Buenos_Aires) | Para que "hace 3 días" signifique lo mismo para vos que para el panel. Si no se puede leer, se usa el reloj de tu máquina y la barra te lo dice | Bloques <script type="application/json"> que la página ya trae servidos adentro de su HTML |
Qué tokens de fecha ofrece esa cuenta (last_7d, this_week_sun_today, this_month…) y con qué día arranca la semana | Para no mandarle al panel un token que esa cuenta no entiende, y para no confundir la semana que arranca en domingo con la que arranca en lunes | Los mismos bloques JSON |
| Cuál de los elementos de la pantalla es el rótulo del selector de fechas | Para poder verificar, después de aplicar un rango, si el panel de verdad se movió | Las props internas de React (__reactProps$… / __reactFiber$…) que la página cuelga de sus propios nodos |
Además, la extensión mira el parámetro act de la URL de la pestaña —el identificador de la cuenta publicitaria abierta— para darse cuenta de que cambiaste de cuenta sin recargar. Lo compara en memoria contra el valor anterior; no lo guarda en ninguna de sus claves de almacenamiento.
Nada más se lee. No se leen nombres de campañas, ni nombres de anuncios, ni gasto, ni presupuesto, ni resultados, ni CPA, ni audiencias, ni datos de facturación, ni los creativos.
Precisión sobre "leer" y "guardar", que no es lo mismo. Para encontrar la zona horaria y los tokens, la extensión recorre con expresiones regulares el texto de los bloques JSON que la página ya tiene servidos, hasta un tope de 8.000.000 de caracteres por pasada. Ese texto puede contener otras cosas además de lo que se busca. De todo eso, lo único que se retiene son los tres campos de la tabla de arriba; el resto no se copia, no se guarda y no se transmite. Decir "no pasa por acá ningún otro dato" sería inexacto; lo exacto es que no se guarda ni sale ninguno.
Sobre el rótulo del selector de fechas. Para marcarlo, la extensión le pone al elemento un atributo HTML propio,
data-avr-rotulo, con el valor vacío, y lo borra antes de poner el siguiente. No lee el texto del rótulo, no lo copia y no lo guarda: lo único que necesita saber es cuál es el elemento.
2. Cómo lo lee: lectura pasiva, y cero red
- La extensión no hace ninguna petición de red. Ni a servidores nuestros —no existen—, ni a la Graph API de Meta, ni a terceros, ni en segundo plano. No hay telemetría de ningún tipo, ni "estadísticas anónimas de uso", ni pings de activación.
- No envuelve ni intercepta el tráfico de la página. No toca
fetch, no tocaXMLHttpRequest, no usasendBeacon,WebSocketniEventSource. Lo único que hace es mirar bloques de texto que la página ya tenía adentro de su HTML. - No lee cookies. No declara el permiso
cookiesy no accede a ninguna API de cookies. - No lee ni usa tokens de sesión,
access_token,fb_dtsgni credenciales de ningún tipo. - No hay
backgroundni service worker. Nada de la extensión corre fuera de la pestaña de Ads Manager. Con la pestaña cerrada, AdKey no existe en memoria. - No se carga ni se ejecuta código remoto. Todo el JavaScript que corre viene adentro del paquete publicado, sin minificar y sin ofuscar, para que cualquiera lo pueda leer.
Podés verificarlo vos mismo: abrí las DevTools en una pestaña de Ads Manager, pestaña Network, y no vas a encontrar una sola petición originada por la extensión.
3. Qué escribe la extensión en la página
Esto no es recolección de datos, pero es lo que la extensión hace y corresponde decirlo: para cambiar el rango, AdKey reescribe cuatro parámetros de la URL de la pestaña —date, insights_date, comparison_date e insights_comparison_date— con history.replaceState y después despacha un evento popstate para despertar al router de la página.
- Es
replaceStatey nuncapushState: no te llena el historial del navegador. - No recarga la página. No hay una sola llamada a
location.reload,location.href,location.assignnilocation.replaceen todo el código. - Nada se escribe sin validarse antes, y si la extensión no puede afirmar que el resultado va a ser correcto —por ejemplo con un modo de "Comparar" que no verificó— no toca la URL y te explica por qué.
Lo único más que escribe en la página es el atributo vacío data-avr-rotulo de la sección 1, y la barra flotante, que vive adentro de un Shadow DOM propio.
4. Qué guarda, y dónde
Todo va a chrome.storage.local: el disco de tu computadora, dentro del perfil de Chrome. Son siete claves y ni una más:
| Clave | Qué tiene adentro |
|---|---|
presets | Tus botones de rango: nombre, tecla, orden, tipo y sus parámetros |
ajustes | Lo detectado de la cuenta: zona horaria, si vino de la cuenta o del navegador, si la semana arranca en domingo o lunes, qué tokens de fecha se detectaron, y cuándo se detectó |
preferencias | Tres cosas: si la extensión está encendida, si la barra se muestra, y el idioma elegido |
aspecto | El tamaño de la barra (chico / normal / grande) y su color |
barra | Dónde dejaste la barra en la ventana: a qué esquina está anclada y sus coordenadas |
teclado | Una sola cosa: qué tecla líder elegiste |
esquema | El número de versión del formato guardado, para poder migrar sin adivinar |
Las siete son configuración tuya o detección de la cuenta. No hay una sola clave con datos de tus anuncios, y no hay ninguna clave con el identificador de tu cuenta publicitaria.
- No se usa
chrome.storage.sync, así que nada de esto se sincroniza con tu cuenta de Google ni con tus otras computadoras. No es solo una promesa: el linter del proyecto lo prohíbe, con un mensaje que dice por qué. Para llevar tus presets a otra máquina está exportar e importar un archivo, que movés vos. - No se usa
localStoragenisessionStorage. - No hay vencimiento y no hay barrido de fondo: lo que guardaste queda hasta que lo borres o desinstales la extensión. Como lo único guardado es tu propia configuración, un vencimiento automático sería borrarte los botones que hiciste.
4.1 Las dos salidas fuera de chrome.storage.local
Nada de esto sale de tu máquina, pero sí sale del pedazo de disco que la extensión administra, y por eso va escrito. Las dos las disparás vos con un click, desde el engranaje de la barra, y las dos mueven exactamente lo mismo: el JSON de tus presets.
- Descargar el archivo. El botón "Descargar" genera un
.jsonen tu carpeta de Descargas con tus presets, la versión del formato y la fecha de exportación. El archivo lo arma el navegador con el flujo de descarga normal (unBloby un link, sin el permisodownloads), y desde que se guarda es un archivo tuyo como cualquier otro: la extensión no lo controla, no lo vuelve a leer y no lo borra nunca — ni al desinstalarla. Borralo vos si no lo querés más. - Copiar al portapapeles. El botón "Copiar" escribe ese mismo JSON en el portapapeles del sistema operativo. Ese portapapeles es del sistema, no de la extensión: no podemos vaciarlo ni saber dónde lo pegás.
El archivo exportado lleva solo tus presets. No lleva el identificador de tu cuenta publicitaria, ni la zona horaria detectada, ni nada leído de la página.
5. A dónde se transmiten los datos
A ningún lado.
- No hay servidor propio. No existe un backend de este proyecto.
- No hay servicios de terceros: ni analytics, ni Sentry, ni Supabase, ni Firebase, ni un procesador de pagos, ni un servidor de licencias.
- No hay cuentas de usuario, no hay login, no hay suscripción, no hay pagos.
- El
manifest.jsonno declarahost_permissions, no declaraexternally_connectabley no declaraweb_accessible_resources. Las únicas direcciones que aparecen en todo el paquete son los tres patrones decontent_scripts.matches—los de la sección 7—, y un patrón dematchesdice dónde se inyecta el script, no a dónde llama: no habilita ninguna conexión. Sinhost_permissionsla extensión no podría hablar con un servidor externo aunque quisiera.
6. Qué NO se recolecta
Ninguna de estas cosas se lee, se guarda ni se transmite:
- Nombres de campañas, de conjuntos de anuncios o de anuncios.
- Gasto, presupuesto, resultados, CPA, ROAS ni ninguna otra métrica.
- Creativos, imágenes, videos ni textos de tus anuncios.
- Datos de audiencias, listas de clientes o cualquier información de las personas que ven tus anuncios.
- Datos de pago, tarjetas, facturación o métodos de pago de la cuenta publicitaria.
- Credenciales, contraseñas, tokens de sesión ni cookies.
- Historial de navegación, pestañas abiertas, marcadores o historial de descargas.
- Contactos, agenda, correo o mensajes.
- Ubicación, dirección IP registrada por nosotros, o identificadores de dispositivo.
- Contenido de cualquier sitio que no sea Meta Ads Manager: la extensión no corre en otras webs.
7. Dónde corre la extensión
Los scripts de contenido se inyectan únicamente en estas tres rutas:
https://adsmanager.facebook.com/adsmanager/*https://business.facebook.com/adsmanager/*https://www.facebook.com/adsmanager/*
Solo en el marco principal de la pestaña (all_frames: false): tampoco corre adentro de los iframes del panel. En cualquier otra página —incluido el resto de facebook.com y de business.facebook.com— la extensión ni siquiera se carga.
Lo que te va a decir Chrome al instalarla, que suena más grande que esto: el aviso de instalación de Chrome nombra dominios y descarta la ruta del patrón. Como uno de los tres patrones es
https://www.facebook.com/adsmanager/*, Chrome va a nombrarwww.facebook.comentero —igual queadsmanager.facebook.comybusiness.facebook.com—, sin la parte/adsmanager/. Es una limitación de cómo Chrome redacta el aviso, no un permiso más ancho: lo que manda es elmatchesdelmanifest.json, y ahí la ruta está escrita. Fuera de/adsmanager/el script no se inyecta. El patrón dewww.facebook.comestá porque esa URL sirve Ads Manager de verdad, y sacarlo dejaría afuera una puerta de entrada que la gente usa.
8. Permisos que pide y por qué
| Permiso | Para qué |
|---|---|
storage | Guardar tus presets, tus atajos y tus preferencias en tu propia máquina. Es el único permiso declarado. |
No pide host_permissions, ni tabs, ni activeTab, ni scripting, ni cookies, ni webRequest, ni downloads, ni identity. Tampoco declara optional_permissions.
9. Qué apaga de verdad el interruptor "Extensión activa"
Esto lo escribimos acá y no solo en la ayuda del interruptor, porque es la clase de diferencia que no querés descubrir sola.
Con el interruptor apagado, la extensión deja de hacer todo lo siguiente:
- La barra se desmonta y desaparece de la pantalla.
- El listener de teclado se desengancha: los atajos dejan de existir.
- Los barridos de los bloques JSON de la página se cancelan y no se vuelven a programar. Apagada no lee la página.
- No queda ningún camino que escriba la URL: sin barra y sin teclas, no hay forma de aplicar un rango.
Lo que sigue vivo con el interruptor apagado, y no te lo vamos a esconder:
- Un temporizador que cada 2 segundos compara el parámetro
actde la URL con el valor anterior. Con la extensión apagada, si detecta un cambio no hace nada más. Es una comparación de dos textos: no lee la página, no lee el almacenamiento y no escribe nada. - Dos escuchas de
chrome.storage.onChanged. Son las que permiten que vuelvas a encenderla desde el ícono sin recargar la pestaña. - La lectura inicial de sus propias siete claves cada vez que cargás la página.
- Un escucha de mensajes en el script del mundo MAIN, que por diseño no tiene acceso a
chrome.*y por lo tanto no puede saber que la extensión está apagada. Como el otro script nunca le manda un pedido estando apagada, nunca marca nada.
O sea: apagada, la extensión saca la barra, deja de escuchar el teclado y deja de leer la página. Lo único que sigue vivo es lo mínimo para que puedas volver a encenderla desde el ícono sin recargar la pestaña. Lo que no podemos decirte es que sea "como si no estuviera instalada". Si querés eso, desactivala desde chrome://extensions o desinstalala.
10. Cómo borrar tus datos
- Borrar un preset: el botón "Borrar" de cada botón en el editor (pide un segundo click para confirmar).
- Reemplazar todo: al importar un archivo podés elegir el modo "Reemplazar todos", que descarta los presets que tenías.
- Desinstalar la extensión: Chrome elimina todo su
chrome.storage.localautomáticamente. Es la forma completa: se van las siete claves. - Si exportaste un archivo, borralo vos desde tu carpeta de Descargas. Ninguna de las formas de arriba lo toca: es un archivo tuyo, fuera del alcance de la extensión.
No hay nada que borrar del lado de un servidor porque no hay servidor.
11. Declaración de manejo de datos ante la Chrome Web Store
Esto es contraintuitivo y conviene dejarlo por escrito: aunque todos los datos queden en tu máquina y no se transmitan a ningún lado, la Chrome Web Store igual exige declarar el manejo de datos. Leer el contenido de una página que el usuario visita cuenta como manejo de datos, sin importar que después no salga del dispositivo.
Por eso, en el formulario de "Prácticas de privacidad" de la tienda declaramos la categoría "Contenido del sitio web" (Website content), que es la que corresponde a leer de la página de Ads Manager la zona horaria de la cuenta, sus tokens de fecha y las props del selector, y aclaramos que ese contenido no se transmite fuera del dispositivo.
Declaramos de más antes que de menos. Y certificamos, porque es verdad:
- Los datos no se venden ni se transfieren a terceros.
- Los datos no se usan para ningún propósito ajeno a la función única de la extensión.
- Los datos no se usan para determinar solvencia crediticia ni para otorgar préstamos.
El uso que AdKey hace de los datos cumple con la Chrome Web Store User Data Policy, incluidos los requisitos de Limited Use.
12. Menores
AdKey es una herramienta de trabajo para gente que administra publicidad. No está dirigida a menores de 13 años.
No pide ni recibe la edad de nadie, ni ningún dato de identificación personal: lo único que guarda son tus botones de rango y tus preferencias, y todo queda en tu máquina. No hay perfilado de usuarios ni forma de distinguir la edad de quien la usa, ni falta.
13. Relación con Meta
Este es un proyecto independiente. No está afiliado, patrocinado ni avalado por Meta Platforms, Inc. "Meta", "Facebook" y "Ads Manager" son marcas de sus respectivos titulares.
14. Cambios en esta política
Si alguna versión futura cambia lo que la extensión lee, guarda o transmite, este documento se actualiza en el mismo commit que el cambio de código, y se sube la fecha de arriba. La política describe lo que el código hace hoy; no es una lista de intenciones.
15. Contacto
adkeysupport@proton.me
Privacy Policy (English)
AdKey — Last updated: 2026-08-28 — Covers version 0.1.0 — Contact: adkeysupport@proton.me
In one line
AdKey stores your date-range buttons and your preferences in chrome.storage.local — on your own computer's disk — and sends nothing anywhere: it does not make a single network request. No servers, no accounts, no analytics, no telemetry.
1. What it reads from the page
While you have a Meta Ads Manager tab open (and only there), AdKey reads three things from that page. None of the three is data about your campaigns.
| What it reads | What for | Where it comes from |
|---|---|---|
The ad account's time zone (an IANA name, e.g. America/Argentina/Buenos_Aires) | So that "the last 3 days" means the same thing to you and to the panel. If it cannot be read, your machine's clock is used and the bar tells you so | <script type="application/json"> blocks the page already ships inside its own HTML |
Which date tokens that account offers (last_7d, this_week_sun_today, this_month…) and which day its week starts on | So it never sends the panel a token that account does not understand, and never confuses a Sunday-start week with a Monday-start one | The same JSON blocks |
| Which element on screen is the date picker's label | So that, after applying a range, it can verify whether the panel actually moved | The internal React props (__reactProps$… / __reactFiber$…) the page hangs off its own nodes |
It also looks at the tab URL's act parameter — the identifier of the ad account currently open — to notice that you switched accounts without a reload. It compares it in memory against the previous value; it is not saved in any of the extension's storage keys.
Nothing else is read. No campaign names, no ad names, no spend, no budget, no results, no CPA, no audiences, no billing data, no creatives.
A precision about "reading" and "storing", which are not the same thing. To find the time zone and the tokens, the extension runs regular expressions over the text of the JSON blocks the page already ships, up to a cap of 8,000,000 characters per pass. That text may contain other things besides what is being looked for. Of all of it, the only things retained are the three fields in the table above; the rest is not copied, not stored and not transmitted. Saying "no other data ever passes through here" would be inaccurate; what is accurate is that none of it is stored and none of it leaves.
About the date picker's label. To mark it, the extension sets one HTML attribute of its own,
data-avr-rotulo, with an empty value, and clears it before setting the next one. It does not read the label's text, does not copy it and does not store it: all it needs to know is which element it is.
2. How it reads: passively, and with zero network
- The extension makes no network requests. Not to servers of ours — there are none — not to Meta's Graph API, not to third parties, not in the background. There is no telemetry of any kind, no "anonymous usage statistics", no activation pings.
- It does not wrap or intercept the page's traffic. It does not touch
fetch, does not touchXMLHttpRequest, does not usesendBeacon,WebSocketorEventSource. All it does is look at blocks of text the page already had inside its HTML. - It does not read cookies. It does not declare the
cookiespermission and does not access any cookie API. - It does not read or use session tokens,
access_token,fb_dtsgor credentials of any kind. - There is no
backgroundand no service worker. Nothing runs outside the Ads Manager tab. With the tab closed, AdKey does not exist in memory. - No remote code is loaded or executed. All the JavaScript that runs ships inside the published package, unminified and unobfuscated, so anyone can read it.
You can check this yourself: open DevTools on an Ads Manager tab, Network panel, and you will not find a single request originated by the extension.
3. What the extension writes to the page
This is not data collection, but it is what the extension does and it belongs here: to change the range, AdKey rewrites four parameters of the tab's URL — date, insights_date, comparison_date and insights_comparison_date — with history.replaceState, and then dispatches a popstate event to wake the page's router.
- It is
replaceStateand neverpushState: it does not fill up your browser history. - It does not reload the page. There is not a single call to
location.reload,location.href,location.assignorlocation.replacein the whole codebase. - Nothing is written without being validated first, and when the extension cannot assert that the result will be correct — for instance with a "Compare" mode it has not verified — it does not touch the URL and tells you why.
The only other thing it writes to the page is the empty data-avr-rotulo attribute from section 1, and the floating bar, which lives inside its own Shadow DOM.
4. What it stores, and where
Everything goes to chrome.storage.local: your computer's disk, inside the Chrome profile. It is seven keys and not one more:
| Key | What is inside |
|---|---|
presets | Your range buttons: name, key, order, type and their parameters |
ajustes | What was detected about the account: time zone, whether it came from the account or the browser, whether the week starts on Sunday or Monday, which date tokens were detected, and when |
preferencias | Three things: whether the extension is on, whether the bar is shown, and the chosen language |
aspecto | The bar's size (small / normal / large) and its color |
barra | Where you left the bar in the window: which corner it is anchored to and its coordinates |
teclado | One single thing: which leader key you chose |
esquema | The version number of the stored format, so it can be migrated without guessing |
All seven are your own configuration or account detection. There is not one key holding data about your ads, and not one key holding your ad account identifier.
chrome.storage.syncis not used, so none of this syncs to your Google account or to your other computers. This is not just a promise: the project's linter forbids it, with a message saying why. To move your presets to another machine there is file export/import, which you drive.localStorageandsessionStorageare not used.- There is no expiry and no background sweep: what you saved stays until you delete it or uninstall the extension. Since the only thing stored is your own configuration, automatic expiry would mean deleting the buttons you built.
4.1 The two ways data leaves chrome.storage.local
None of this leaves your machine, but it does leave the slice of disk the extension manages, so it is written down. You trigger both with a click, from the bar's gear, and both move exactly the same thing: the JSON of your presets.
- Download the file. The "Download" button generates a
.jsonin your Downloads folder with your presets, the format version and the export date. The browser builds it through the normal download flow (aBloband a link, without thedownloadspermission), and from the moment it is saved it is a file of yours like any other: the extension does not control it, does not read it again and never deletes it — not even on uninstall. Delete it yourself if you no longer want it. - Copy to clipboard. The "Copy" button writes that same JSON to the operating system's clipboard. That clipboard belongs to the system, not to the extension: we cannot empty it or know where you paste it.
The exported file carries only your presets. It does not carry your ad account identifier, nor the detected time zone, nor anything read from the page.
5. Where data is transmitted
Nowhere.
- There is no server of ours. This project has no backend.
- There are no third-party services: no analytics, no Sentry, no Supabase, no Firebase, no payment processor, no license server.
- There are no user accounts, no login, no subscription, no payments.
- The
manifest.jsondeclares nohost_permissions, declares noexternally_connectableand declares noweb_accessible_resources. The only addresses anywhere in the package are the threecontent_scripts.matchespatterns listed in section 7, and amatchespattern says where a script is injected, not what it can call: it grants no connectivity. Withouthost_permissionsthe extension could not talk to an external server even if it wanted to.
6. What is never collected
None of these are read, stored or transmitted:
- Campaign, ad set or ad names.
- Spend, budget, results, CPA, ROAS or any other metric.
- Creatives, images, videos or ad copy.
- Audience data, customer lists or any information about the people who see your ads.
- Payment data, cards, billing or the ad account's payment methods.
- Credentials, passwords, session tokens or cookies.
- Browsing history, open tabs, bookmarks or download history.
- Contacts, calendar, email or messages.
- Location, an IP address recorded by us, or device identifiers.
- Content of any site other than Meta Ads Manager: the extension does not run on other websites.
7. Where the extension runs
Content scripts are injected only into these three paths:
https://adsmanager.facebook.com/adsmanager/*https://business.facebook.com/adsmanager/*https://www.facebook.com/adsmanager/*
In the tab's main frame only (all_frames: false): it does not run inside the panel's iframes either. On any other page — including the rest of facebook.com and of business.facebook.com — the extension does not even load.
What Chrome will tell you at install time, which sounds bigger than this: Chrome's install warning names domains and drops the pattern's path. Since one of the three patterns is
https://www.facebook.com/adsmanager/*, Chrome will name the whole ofwww.facebook.com— as well asadsmanager.facebook.comandbusiness.facebook.com— without the/adsmanager/part. That is a limitation of how Chrome words the warning, not a wider permission: what rules is thematchesinmanifest.json, and the path is written there. Outside/adsmanager/the script is not injected. Thewww.facebook.compattern is there because that URL really does serve Ads Manager, and removing it would lock out a door people use.
8. Permissions requested, and why
| Permission | What for |
|---|---|
storage | To store your presets, your shortcuts and your preferences on your own machine. It is the only permission declared. |
It does not request host_permissions, tabs, activeTab, scripting, cookies, webRequest, downloads or identity. It declares no optional_permissions either.
9. What the "Extension active" switch really turns off
We write this here, and not only in the switch's help text, because it is the kind of difference you do not want to discover on your own.
With the switch off, the extension stops doing all of the following:
- The bar unmounts and disappears from the screen.
- The keyboard listener is detached: the shortcuts stop existing.
- Sweeps of the page's JSON blocks are cancelled and never rescheduled. Turned off, it does not read the page.
- No path remains that writes the URL: with no bar and no keys, there is no way to apply a range.
What stays alive with the switch off, and we will not hide it from you:
- A timer that every 2 seconds compares the URL's
actparameter with the previous value. With the extension off, if it detects a change it does nothing further. It is a comparison of two strings: it does not read the page, does not read storage and writes nothing. - Two
chrome.storage.onChangedlisteners. They are what lets you turn it back on from the icon without reloading the tab. - The initial read of its own seven keys every time you load the page.
- A message listener in the MAIN-world script, which by design has no access to
chrome.*and therefore cannot know that the extension is off. Since the other script never sends it a request while off, it never marks anything.
In short: turned off, the extension removes the bar, stops listening to the keyboard and stops reading the page. The only thing still alive is the minimum needed for you to turn it back on from the icon without reloading the tab. What we cannot tell you is that it is "as if it were not installed". If you want that, disable it from chrome://extensions or uninstall it.
10. How to delete your data
- Delete one preset: the "Delete" button on each button in the editor (it asks for a second click to confirm).
- Replace everything: when importing a file you can choose the "Replace all" mode, which discards the presets you had.
- Uninstall the extension: Chrome deletes its entire
chrome.storage.localautomatically. That is the complete way: all seven keys go. - If you exported a file, delete it yourself from your Downloads folder. None of the ways above touch it: it is a file of yours, outside the extension's reach.
There is nothing to delete on a server's side because there is no server.
11. Chrome Web Store data disclosure
This is counterintuitive and worth writing down: even though all data stays on your machine and is transmitted nowhere, the Chrome Web Store still requires declaring data handling. Reading the content of a page the user visits counts as handling data, regardless of whether it later leaves the device.
That is why, in the store's "Privacy practices" form, we declare the Website content category — the one that corresponds to reading the account's time zone, its date tokens and the picker's props from the Ads Manager page — and state that this content is not transmitted off the device.
We over-declare rather than under-declare. And we certify, because it is true:
- Data is not sold or transferred to third parties.
- Data is not used for any purpose unrelated to the extension's single purpose.
- Data is not used to determine creditworthiness or for lending purposes.
AdKey's use of data complies with the Chrome Web Store User Data Policy, including the Limited Use requirements.
12. Children
AdKey is a work tool for people who manage advertising. It is not directed at children under 13.
It does not ask for or receive anyone's age, nor any personally identifying data: the only things it stores are your range buttons and your preferences, and all of it stays on your machine. There is no user profiling and no way to tell the age of whoever uses it, nor any need to.
13. Relationship with Meta
This is an independent project. It is not affiliated with, sponsored by or endorsed by Meta Platforms, Inc. "Meta", "Facebook" and "Ads Manager" are trademarks of their respective owners.
14. Changes to this policy
If a future version changes what the extension reads, stores or transmits, this document is updated in the same commit as the code change, and the date above is bumped. The policy describes what the code does today; it is not a list of intentions.
15. Contact
adkeysupport@proton.me