Política de privacidad

AdKeyhttps://adkey.netlify.app


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é leePara 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 diceBloques <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 semanaPara 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 lunesLos mismos bloques JSON
Cuál de los elementos de la pantalla es el rótulo del selector de fechasPara 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

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ñadate, 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.

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:

ClaveQué tiene adentro
presetsTus botones de rango: nombre, tecla, orden, tipo y sus parámetros
ajustesLo 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ó
preferenciasTres cosas: si la extensión está encendida, si la barra se muestra, y el idioma elegido
aspectoEl tamaño de la barra (chico / normal / grande) y su color
barraDónde dejaste la barra en la ventana: a qué esquina está anclada y sus coordenadas
tecladoUna sola cosa: qué tecla líder elegiste
esquemaEl 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.

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.

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.

6. Qué NO se recolecta

Ninguna de estas cosas se lee, se guarda ni se transmite:

7. Dónde corre la extensión

Los scripts de contenido se inyectan únicamente en estas tres rutas:

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 nombrar www.facebook.com entero —igual que adsmanager.facebook.com y business.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 el matches del manifest.json, y ahí la ruta está escrita. Fuera de /adsmanager/ el script no se inyecta. El patrón de www.facebook.com está 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é

PermisoPara qué
storageGuardar 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:

Lo que sigue vivo con el interruptor apagado, y no te lo vamos a esconder:

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

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:

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 readsWhat forWhere 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 onSo it never sends the panel a token that account does not understand, and never confuses a Sunday-start week with a Monday-start oneThe same JSON blocks
Which element on screen is the date picker's labelSo that, after applying a range, it can verify whether the panel actually movedThe 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

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 URLdate, insights_date, comparison_date and insights_comparison_date — with history.replaceState, and then dispatches a popstate event to wake the page's router.

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:

KeyWhat is inside
presetsYour range buttons: name, key, order, type and their parameters
ajustesWhat 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
preferenciasThree things: whether the extension is on, whether the bar is shown, and the chosen language
aspectoThe bar's size (small / normal / large) and its color
barraWhere you left the bar in the window: which corner it is anchored to and its coordinates
tecladoOne single thing: which leader key you chose
esquemaThe 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.

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.

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.

6. What is never collected

None of these are read, stored or transmitted:

7. Where the extension runs

Content scripts are injected only into these three paths:

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 of www.facebook.com — as well as adsmanager.facebook.com and business.facebook.com — without the /adsmanager/ part. That is a limitation of how Chrome words the warning, not a wider permission: what rules is the matches in manifest.json, and the path is written there. Outside /adsmanager/ the script is not injected. The www.facebook.com pattern 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

PermissionWhat for
storageTo 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:

What stays alive with the switch off, and we will not hide it from you:

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

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:

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