¿Está lento el SAT? Tu asistente lo espera por ti.
Ya automatizaste el mes. Falta el portal.
La precarga de todos tus clientes
Pídelo así:
«tráeme la precarga de sept de todos mis clientes»
Son totales por campo. Los CFDI siguen en tu sistema.
Ver en el chatCompara tus cifras con el formulario
Pídelo así:
«compárame el papel de trabajo de Ana Torres contra el formulario»
Recalcula al instante, las veces que quieras.
Ver en el chatDel papel de trabajo al acuse
Pídelo así:
«te paso el papel de trabajo de Lucía Méndez, súbelo como borrador de septiembre»
Solo presenta el borrador que revisaste, por la cantidad que viste.
Ver en el chatLa pieza que le faltaba a tu agente fiscal
1. Tu papel de trabajo
en Excel o con tu asistente
2. Tu asistente
Claude o ChatGPT
3. SAT SDK
la pieza que faltaba
4. Declaraciones
el portal del SAT
Tu navegador
con la app abierta
Tu e.firma
el .key y su contraseña
Herramientas para tu asistente
Tus clientes
Precarga
Cálculo
Borrador y vista previa
Declaración
En tiempo, extemporánea o complementaria, tu asistente la presenta.
Hoy 1 régimen
Personas físicas: RESICO
- ISR, listo
- IVA, listo
En proceso 3 regímenes
Personas morales: Régimen General de Ley
- ISR, listo
- IVA, listo
- Salarios, en proceso
Personas morales: RESICO
- ISR, en proceso
- IVA, listo
Personas físicas: Actividad Empresarial y Profesional
- ISR, en proceso
- IVA, en proceso
Después 1 régimen
Personas físicas: Arrendamiento
Los primeros 100 contadores: 15 RFC gratis para siempre
Fundador
- Precarga, cálculo, borrador y vista previa
- Declaración, acuse y línea de captura desde el chat
- RESICO de personas físicas, también extemporáneas y complementarias
- Los regímenes que agreguemos, incluidos
Sin tarjeta.
Equivale al plan Contador de $199 al mes.
Cierra cuando entra el contador 100.
Empieza en tres pasos
- 1
Crea tu cuenta
Abre la app de SAT SDK.
- 2
Agrega a tus clientes
Arrastra el .cer de cada uno. La app lee el RFC y el nombre.
- 3
Conecta tu asistente
Agrega «SAT SDK» con esta dirección en Claude, con cualquier plan, o en ChatGPT Business o Enterprise.
- Abre Personalizar › Conectores, en claude.ai o en la app de escritorio.
- Pulsa + Añadir › Añadir conector personalizado.
- Nómbralo «SAT SDK» y pega la dirección.
- Pulsa Continuar dos veces y luego Añadir.
- Entra a tu cuenta de SAT SDK y aprueba el acceso.
- En un chat, pulsa + › Conectores y activa «SAT SDK».
El plan gratuito admite un conector personalizado. En Team o Enterprise, el propietario lo agrega y tú pulsas Conectar. Después también funciona en la app del celular.
- En el navegador, abre chatgpt.com/plugins.
- Pulsa + y elige agregar un servidor MCP personalizado.
- Nómbralo «SAT SDK», pega la dirección y elige OAuth.
- Acepta el aviso de riesgo y crea el plugin.
- Instálalo, entra a tu cuenta de SAT SDK y aprueba el acceso.
- En un chat nuevo, escribe @ y elige «SAT SDK».
Requiere ChatGPT Business o Enterprise, en la web. En Business lo agrega un administrador.
¿No ves estas opciones? Sigue la guía de Claude o la de OpenAI (en inglés).
Deja la app abierta en una pestaña. Cuando haga falta abrir sesión, ahí firmas con la e.firma.
Después de tus 15 RFC
Precio de introducción. Los planes solo cambian en cuántos RFC atiendes al mes.
Contador
- $13 por RFC
- Para una cartera chica
Despacho
- $10 por RFC
- Para la cartera completa de un contador
¿Más de 50 RFC, auxiliares o tu propio sistema?
Desde ahí, el precio por RFC solo baja.
Solo cuentan los RFC que atiendes en el mes. Si pasas del límite, terminas tu cierre.
Fundador: tus 15 RFC gratis se suman a cualquier plan.
Contrata antes del 31 de marzo de 2027 y conserva este precio 12 meses.
Más IVA: $230.84 y $578.84 al mes. Te facturamos.
Antes de conectar tu asistente
Tu próximo 17, sin abrir el portal.
Sin tarjeta. La oferta cierra con el contador 100.
Presenta declaraciones desde tu software
import { SatSdk } from 'sat-sdk'import decisiones from './septiembre.json'const sat = new SatSdk({ apiKey: process.env.SAT_SDK_KEY })// session.challenge se firma en el navegador (firma.ts)const session = await sat.sessions.open({ rfc: 'XAXX010101000' })const septiembre = sat.declarations.period('2026-09', { session })const { prefillSnapshot } = await septiembre.prefill({ obligations: decisiones.obligations,})// No toca el portal: calcula las veces que quierasconst { amountToPay, issues } = await sat.declarations.compute({ prefillSnapshot, declaration: decisiones,})const { draftSnapshot } = await septiembre.saveDraft({ prefillSnapshot, declaration: decisiones,})const { acuse } = await septiembre.submitDraft({ draftSnapshot, expectedAmountToPay: 1790, // la cantidad que aprobó tu usuario})Salida
prefill09:02pfl_292632ec4cbbc2f5computeamountToPay: 1790, issues: []saveDraft09:20drf_b4008fc2e529a035submitDraft09:31acuse.pdfAcuse de septiembre
XAXX010101000 · $1,790
import { signChallenge } from 'sat-sdk/efirma'// Corre en el navegador de tu usuario.// El .key y su contraseña no salen de aquí.const firma = await signChallenge(session, { cer: cerFile, key: keyFile, password,})await fetch(`/api/sesiones/${session.id}/firma`, { method: 'POST', body: JSON.stringify(firma),})// En tu servidor:await sat.sessions.signIn(session.id, firma)Lo que sale del navegador
{ "certificate": "MIIGJzCCBA+gAwIBAgIUMDAwMDEw…", "signature": "kQ3vP8yXc2Lr0eT5uWbJ9nA4mZs7…"}El .key y la contraseña se quedan en el navegador.
import { SatSdk } from 'sat-sdk'const sat = new SatSdk({ apiKey: process.env.SAT_SDK_KEY })// Te avisamos cuando el SAT contesta cada tareaexport async function POST(request: Request) { const event = await sat.webhooks.verify(request) if (event.type === 'task.completed') { const task = await sat.tasks.retrieve(event.data.id) if (task.action === 'prefill') await guardarPrecarga(task) } return new Response(null, { status: 204 })}Evento recibido
{ "id": "evt_01JA6Y2F3G5H7J9K", "type": "task.completed", "data": { "id": "tsk_01JA6Y1K2M8Q4R7T", "action": "prefill", "status": "completed", "taxpayer": { "rfc": "XAXX010101000" }, "period": "2026-09" }}curl https://api.satsdk.com/v1/declarations/compute \ -H "Authorization: Bearer $SAT_SDK_KEY" \ -H "Content-Type: application/json" \ -d '{ "prefillSnapshot": "pfl_292632ec4cbbc2f5", "declaration": { "obligations": ["isr.resicoIndividual", "iva.resico"], "isr": { "resicoIndividual": { "income": { "added": 2000, "byActivity": { "professionalServices": 102000 }, "discounts": { "coOwnership": 0 }, "coOwnership": [] }, "withheld": { "added": 0, "subtracted": 0 }, "payment": { "offsets": [], "incentives": {} } } }, "iva": { "resico": { "paid": { "taxedActivities": 0, "mixedActivities": 0, "nonCreditable": 750 } } } } }'Respuesta 200
{ "amountToPay": 1790, "isr": { "resicoIndividual": { "computed": { "tax": 2040, "withheld": 250, "amountToPay": 1790 } } }, "issues": [], "engine": { "status": "verified" }}