Rank tracker per Google Maps
Controlla la posizione delle attività su Google Maps, quartiere per quartiere
Incasso mensile: 19.100 USD (fonte indicata nella scheda)
Cosa fa
Software per agenzie di SEO locale: mostra a che posto compare un'attività su Google Maps nei diversi punti della città e dà consigli su come migliorare. Nell'annuncio di vendita dichiara oltre 500 abbonati.
Come guadagna
Abbonamenti mensili e annuali per agenzie. Dati dall'annuncio di vendita su Flippa, con dati verificati dalla piattaforma.
Rendilo tuo
- Per le attività italiane direttamente, non solo per le agenzie, con un prezzo basso.
- Si collega bene a un servizio di local GEO.
Le frasi da scrivere all'AI
1. Base del sito e grafica
Crea un'app web in italiano chiamata "Mappa Posizioni": mostra a che posto compare un'attività su Google Maps in tanti punti della città, con una mappa a griglia colorata, per le agenzie di SEO locale. Usa React, Vite, TypeScript e Tailwind CSS.
Pagine da creare:
1. Pagina iniziale con un esempio di mappa a griglia e prezzi
2. Registrazione e accesso
3. Elenco delle attività monitorate dall'agenzia
4. Pagina di un'attività: mappa a griglia, andamento, concorrenti
5. Report in PDF con il logo dell'agenzia
Stile: analitico e chiaro: sfondo bianco, blu #1D4ED8, verde #16A34A per le prime posizioni, giallo #EAB308, rosso #DC2626 per le ultime, carattere "Inter", mappa grande al centro. Nessuna immagine generica di stock.
Tutto deve funzionare perfettamente da telefono. Tutti i testi in italiano, chiari e senza parole tecniche.
2. Database, account e sicurezza
Collega il progetto a Supabase e attiva la registrazione con email e password.
Crea queste tabelle:
- "attivita_monitorate": nome, ricerca da controllare (es. "pizzeria"), centro della griglia, raggio, collegate all'utente
- "rilevazioni": per ogni punto della griglia posizione trovata, data e concorrenti nelle prime 3 posizioni
Regole di sicurezza obbligatorie:
- ogni agenzia vede solo le sue attività e rilevazioni
- le rilevazioni le scrive solo la Edge Function
- il piano non si modifica dal browser
Usa esattamente il codice SQL che trovi nei "Dettagli tecnici" di questa scheda: eseguilo nel SQL Editor di Supabase prima di continuare, poi collega le pagine alle tabelle.
3. La griglia di controllo
Quando l'agenzia aggiunge un'attività, sceglie il centro sulla mappa, il raggio (1, 3 o 5 km) e la griglia (5x5 o 7x7 punti). La funzione nei Dettagli tecnici calcola le coordinate dei punti.
La Edge Function "rilevazione" controlla, per ogni punto, la posizione dell'attività nei risultati locali per la ricerca impostata, usando un fornitore di dati di ricerca locale con API ufficiali e rispettandone le condizioni d'uso. Salva il risultato di ogni punto e le prime 3 attività trovate.
Mostra la mappa con un cerchio colorato per ogni punto e il numero della posizione dentro: verde (1–3), giallo (4–10), rosso (oltre 10 o non trovata).
4. Andamento, concorrenti e report
Nella pagina dell'attività aggiungi: posizione media della griglia con l'andamento nel tempo, confronto tra due date con le due mappe affiancate, e la classifica dei concorrenti che compaiono più spesso nelle prime 3 posizioni.
Report mensile in PDF con il logo e i colori dell'agenzia, la mappa, l'andamento e 3 consigli, da mandare al cliente finale. Controllo automatico ogni settimana per i clienti Pro.
5. Pagamenti con Stripe
Aggiungi un abbonamento a 49 € al mese. Gratis l'utente ha: una sola attività e griglia 5x5 una volta al mese. Con il piano Pro sblocca: fino a 20 attività, griglia 7x7, controllo settimanale e report con il logo dell'agenzia.
A pagamento riuscito il webhook porta l'utente al piano Pro; se l'abbonamento viene disdetto o non rinnovato lo riporta al piano gratuito.
Per la sessione di pagamento e il webhook segui la guida "Pagamenti con Stripe" di Fattibile.
6. Controlli specifici di questo progetto
Oltre ai controlli della guida "Controllo finale", verifica in particolare:
1. Costi: calcola quante chiamate al fornitore di dati fa ogni controllo (25 o 49 punti per attività) e verifica che il prezzo dell'abbonamento le copra con margine.
Correggi quello che non va e scrivimi cosa hai cambiato.
Dettagli tecnici
Calcolo dei punti della griglia
Calcola le coordinate di una griglia di punti attorno al centro, a distanza regolare in chilometri: sono i punti in cui si controlla la posizione.
// Restituisce una griglia lato x lato di punti attorno al centro
export function grigliaPunti(lat: number, lng: number, raggioKm: number, lato: 5 | 7) {
const punti: { lat: number; lng: number; riga: number; colonna: number }[] = [];
const passoKm = (2 * raggioKm) / (lato - 1);
const kmPerGradoLat = 111.32;
const kmPerGradoLng = 111.32 * Math.cos((lat * Math.PI) / 180);
const meta = (lato - 1) / 2;
for (let riga = 0; riga < lato; riga++) {
for (let colonna = 0; colonna < lato; colonna++) {
punti.push({
lat: lat + ((meta - riga) * passoKm) / kmPerGradoLat,
lng: lng + ((colonna - meta) * passoKm) / kmPerGradoLng,
riga,
colonna,
});
}
}
return punti;
}Tabelle e posizione media
Le attività monitorate, le rilevazioni e la posizione media di ogni controllo (i punti non trovati contano come 21).
create table attivita_monitorate (
id uuid primary key default gen_random_uuid(),
utente_id uuid not null references auth.users(id) on delete cascade,
nome text not null,
ricerca text not null,
centro_lat double precision not null,
centro_lng double precision not null,
raggio_km numeric not null default 3,
lato int not null default 5 check (lato in (5, 7))
);
create table rilevazioni (
id bigint generated always as identity primary key,
attivita_id uuid not null references attivita_monitorate(id) on delete cascade,
utente_id uuid not null references auth.users(id) on delete cascade,
riga int not null,
colonna int not null,
posizione int, -- null = non trovata nei primi 20
primi_tre text[] not null default '{}',
controllo_il date not null default current_date
);
alter table attivita_monitorate enable row level security;
create policy "le mie righe" on attivita_monitorate
for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);
alter table rilevazioni enable row level security;
create policy "leggo le mie rilevazioni" on rilevazioni
for select using (auth.uid() = utente_id);
-- Posizione media per ogni giorno di controllo
select controllo_il, round(avg(coalesce(posizione, 21)), 1) as posizione_media
from rilevazioni
where attivita_id = 'ID-ATTIVITA'
group by controllo_il
order by controllo_il;
Pezzi comuni a tutti i progetti
Glossario
- Cron
- Un'operazione programmata che parte da sola a orari fissi, per esempio ogni lunedì mattina.
- SEO locale
- Il lavoro per far comparire un'attività nei primi risultati di Google e Google Maps nella sua zona.