Captación rápida de vendedores
Mensaje directo para propietarios que quieren vender con agencia.
ID: tpl-1
Lanza campañas en la cuenta publicitaria del cliente: conexión OAuth, pago de tu SaaS con Stripe, disparo a n8n y sincronización de métricas (Meta Insights + leads en Supabase).
Flujo previsto
Conecta la cuenta donde corre el gasto (Meta, Google o TikTok). Tras OAuth, tokens y metadatos se guardan en Supabase (`tenants_ad_accounts`) para n8n y la app.
Facebook / Instagram
OAuth con permisos ads_management, ads_read y business_management.
tenant_memberships, aplica las migraciones 0020 y 0021 (RPC resolve_active_tenant_id). Si no, añade membresía / default_tenant_id. Puedes pulsar el botón; si falta tenant, Meta te redirigirá con un mensaje de error.Añade en .env.local (y reinicia next dev): META_APP_ID, META_APP_SECRET y, en producción, NEXT_PUBLIC_APP_URL igual que la URL de redirección en Meta. Alias admitidos: FACEBOOK_APP_ID / FACEBOOK_APP_SECRET; el ID puede ser NEXT_PUBLIC_META_APP_ID.
Búsqueda, Display y YouTube
OAuth con scope adwords. Requiere GOOGLE_ADS_DEVELOPER_TOKEN en servidor.
Añade en .env.local: GOOGLE_ADS_CLIENT_ID, GOOGLE_ADS_CLIENT_SECRET, GOOGLE_ADS_DEVELOPER_TOKEN. Redirect URI autorizada en Google Cloud: NEXT_PUBLIC_APP_URL/api/integrations/google-ads/callback
TikTok Marketing API
OAuth del portal business-api.tiktok.com. Registra la misma redirect URI en tu app (Mis aplicaciones).
En .env.local: TIKTOK_MARKETING_APP_ID, TIKTOK_MARKETING_SECRET. Redirect en TikTok: NEXT_PUBLIC_APP_URL/api/integrations/tiktok-ads/callback
El gasto de anuncios lo cobra Meta (o Google) en la tarjeta del cliente. Stripe sirve para que pague tu SaaS (activación, fee mensual, etc.) antes de que el backend deje lanzar la campaña hacia n8n.
Qué hay hoy en el código
STRIPE_PUBLIC_KEY (cabecera de esta página y chip arriba).services/stripe/budget.ts → validateCampaignBudget: si no hay clave pública, el formulario "Lanzar campaña" no pasa la validación; si la hay, solo valida el mínimo de presupuesto diario (15 €).Qué falta para Stripe “de verdad”
STRIPE_SECRET_KEY y STRIPE_WEBHOOK_SECRET solo en el servidor (nunca en el cliente).POST /api/billing/checkout-session que cree una Checkout Session y devuelva la URL de pago.checkout.session.completed que marque en Supabase “pagado” para ese tenant o campaña.create-campaign.Subirás los archivos a Supabase Storage y enlazarás cada plantilla aquí. El comercial solo elige una opción al lanzar; no edita vídeo en la app.
Mensaje directo para propietarios que quieren vender con agencia.
ID: tpl-1
Enfoque en exclusividad y visitas cualificadas.
ID: tpl-2
Renta y revalorización; tono informativo.
ID: tpl-3
El formulario llama a POST /api/webhooks/create-campaign con validación y auditoría. Cuando tengas Checkout, bloquea el envío hasta que el pago esté confirmado en servidor.
Estos datos vendrán de Meta Insights (impresiones, clics, gasto) y de tus leads en Supabase; el CPL se calculará en servidor o en n8n al sincronizar.
| Campaña | Estado | Impresiones | Clics | Leads | CPL |
|---|---|---|---|---|---|
| Seller Leads Madrid | Activa | 12.450 | 540 | 32 | 18,4 € |
| Luxury Owners BCN | Borrador | 0 | 0 | 0 | — |
| Rent to Sell Valencia | Pausada | 8340 | 221 | 14 | 22,1 € |