La flexibilidad de Excel, la potencia de un ERP

Modela tu empresa con la libertad de una hoja de cálculo, sobre una base de datos real: validaciones, auditoría, automatizaciones y millones de registros. Sin escribir código.

Sin código PostgreSQL API completa
ANTES
clientes_FINAL_v2_COPIA(3).xlsx Sin guardar
ABCD
1NombreEmailTfnoTipo
2María G.maria@emp612345678premium
3carlos lopez#REF!sin tfnoPREMIUM
4???email malo+34612basico
Errores · Sin validación · Formatos inconsistentes
Con Dinaup
DESPUÉS
Nuevo cliente #CLI-2026-0084
Validado
María García López
12345678A
+34 612 345 678
Premium
Personalizado
REF-MARIA-2026

Campo creado por ti · Se genera automáticamente

Auditoría · API · Histórico
Desliza para descubrir más
Transformación en vivo

De hojas de cálculo a
formularios inteligentes

Dinaup convierte la flexibilidad caótica de Excel en aplicaciones estructuradas, validadas y listas para crecer con tu negocio.

Excel tradicional

Hojas de cálculo
Caótico
#
Nombre
Email
Teléfono
Estado
1
Juan Pérez
+34 600 000 001
Activo
2
María García
+34 600 000 002
Activo
3
Carlos López
+34 600 000 003
Pendiente
Sin validaciones · Propenso a errores · Difícil de escalar
Evoluciona

Formulario Dinaup

Aplicación estructurada
Validado
Nombre completo Requerido
Juan Pérez
Campo obligatorio validado
Email corporativo Requerido
Formato validado
Teléfono Requerido
+34 600 000 001
Prefijo internacional validado
Estado Selector
Activo
Lista predefinida
Fecha de alta Auto
27/01/2026
Generado automáticamente
Validación automática · Reglas de negocio · Listo para escalar
Soluciones Ready to Go

Empieza con aplicaciones
que ya funcionan

Arrancas con una base sólida: ventas, tareas, personas, clientes. Todo conectado desde el primer día.

TPV Dinaup
Ready to Go

TPV listo para vender

Cobros, productos, cierres y tickets funcionando desde el primer día.

Tareas y proyectos en Dinaup
Ready to Go

Tareas y proyectos

Organiza el trabajo real de tu equipo, no una teoría.

Recursos humanos en Dinaup
Ready to Go

Recursos Humanos

Fichajes, horarios y control de equipo desde una única base.

CRM Dinaup
Ready to Go

CRM

Oportunidades, estados y seguimiento comercial sin rigidez.

TPV, CRM, RRHH o Proyectos. Elige por dónde empezar, no hasta dónde llegar.
Secciones

Gestiona todo lo que imagines

Ready to Go trae secciones listas para usar. Y cuando tu empresa necesita algo más, creas secciones personalizadas sin romper nada de lo que ya funciona.

Clientes
Ready to Go
Productos
Ready to Go
Ventas
Ready to Go
Facturas
Ready to Go
Mis Proyectos
Personalizada
Control de Calidad
Personalizada
Gestión de Unicornios
Personalizada

¿Qué es Ready to Go?

Son módulos ya diseñados y optimizados para lo que cualquier empresa necesita: clientes, productos, ventas, facturación y más. Se activan con un clic y funcionan sin configuración previa. Usas Dinaup desde el primer minuto.

Secciones personalizadas

Cuando tu negocio no encaja en lo estándar, Dinaup no se queda corto. Creas secciones propias que reflejan exactamente tus procesos: cómo trabajas, qué controlas y qué necesitas medir. Sin límites, sin código, sobre la misma base que ya funciona.

Campos

Añade los campos que necesites

Cada sección incluye campos Ready to Go para empezar rápido. Y si te falta algo, añades campos personalizados que capturan justo la información que tu empresa necesita.

Editor de campos

Sección: Productos
Personalizado
Personalizado

Validación automática

Cada campo valida los datos de forma inteligente: formatos correctos, rangos permitidos, obligatoriedad y reglas propias. Menos errores y datos siempre consistentes.

Campos personalizados sin límites

Crea campos con fórmulas automáticas, relaciones entre secciones, validaciones avanzadas, valores calculados y KPIs. Todo desde la interfaz, sin escribir código ni depender de desarrollos a medida.

Webhooks y API REST

Conecta Dinaup con cualquier sistema

Recibe notificaciones en tiempo real, consulta informes y automatiza procesos con n8n, Make, Zapier o tu propio código.

Notificaciones en tiempo real

Webhooks cuando cambian tus datos
LIVE

Recibe una notificación HTTP cada vez que se cree, modifique o elimine un registro de cualquier sección.

Nuevo pedido → enviar email de confirmación
Stock bajo → avisar al proveedor
Cliente actualizado → sincronizar el CRM
Compatible con:
n8nn8n MMake ZZapier

Consulta informes vía API

Datos estructurados en JSON
REST API

Cualquier informe que crees queda disponible al instante como endpoint de API.

Petición cURL GET
curl -X POST "https://webhook.dinaup.com/api/reports?id=35461251..." \
     -H "Authorization: Bearer tu_token"
Paginación

Controla el volumen de resultados

Filtros

Por cualquier campo del informe

response.json 200 OK
{
  "data": [
    {
      "Estado": "En curso",
      "Paciente": "Javi C.",
      "Medico": "Juan Rodríguez"
    }
  ],
  "totalResults": 59
}
n8n · Ejemplo de flujo

Automatiza sin límites

Conecta Dinaup con cientos de aplicaciones y monta flujos de trabajo automáticos sin programar.

Workflow: Nueva venta
ACTIVO
Webhook
Trigger: Dinaup
Nueva venta creada
IF
Condición
Total > 500 €
Gmail
Enviar email
Notificar al cliente
Slack
Mensaje
#ventas-importantes
Última ejecución: hace 2 min Ejecuciones hoy: 47 Éxito: 100%

Tiempo real

Los webhooks se disparan al instante cuando cambian tus datos en Dinaup.

Sin programar

Arrastra y conecta nodos visuales para crear flujos complejos sin código.

+400 integraciones

Conecta con Gmail, Slack, Sheets, Notion, Airtable y cientos de aplicaciones más.

SDK oficial · Fuertemente tipado

SDK .NET

Tu estructura de datos, convertida en modelos C# tipados. Autocompletado real, errores en compilación y cero strings mágicos.

var client = await DinaupClientC.ConnectAsync(
    endPoint: "https://api.dinaup.com/v2/tu-codigo",
    publicKey: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    secretKey: "tu-secret-key-aqui"
);

// ✓ Conectado. Ya puedes operar.
using Dinaup;

// Las únicas credenciales en variables de entorno
var vault = new VaultData(
    Environment.GetEnvironmentVariable("VAULT_URL"),
    Environment.GetEnvironmentVariable("VAULT_PASSWORD")
);
vault.Initialize();

// Todo lo demás viene del Vault
var client = await DinaupClientC.ConnectAsync(
    endPoint: vault.Read("dinaup.endpoint"),
    publicKey: vault.Read("dinaup.publickey"),
    secretKey: vault.Read("dinaup.secretkey")
);
// ✓ Credenciales seguras desde Vault
using Dinaup;

var builder = WebApplication.CreateBuilder(args);

// Cargar Vault
var vault = new VaultData(
    Environment.GetEnvironmentVariable("VAULT_URL"),
    Environment.GetEnvironmentVariable("VAULT_PASSWORD")
);
vault.Initialize();

// Conectar a Dinaup
var client = await DinaupClientC.ConnectAsync(
    endPoint: vault.Read("dinaup.endpoint"),
    publicKey: vault.Read("dinaup.publickey"),
    secretKey: vault.Read("dinaup.secretkey")
);

// Registrar como Singleton
builder.Services.AddSingleton(client);
var app = builder.Build();
var report = new APIVentasC();
await report.ExecuteQueryAsync(client);

foreach (var row in report.Rows)
{
    Console.WriteLine($"{row.Factura}: {row.Total}");
}
// Filtros y ordenación avanzada
var report = new APIVentasC();

report.AddFilterBetween(VentasES.Fecha, inicioMes, finMes);
report.AddFilter(VentasES.Estado, "=", EstadoE.Completada.INT());
report.AddOrder(VentasES.Total, descending: true);

await report.ExecuteQueryAsync(client);

foreach (var row in report.Rows)
{
    Console.WriteLine($"{row.Numero}: {row.Total}€");
}
// Página {report.CurrentPage} de {report.TotalPages}
// Recorrer todas las páginas de resultados
var report = new APIProductosC();
await report.ExecuteQueryAsync(client);

if (report.Rows.IsNotEmpty())
{
    do
    {
        foreach (var row in report.Rows)
        {
            // Procesar cada registro
        }
    } while (await report.ExecuteQuery_NextPageAsync());
}
// ✓ Todos los registros procesados
var producto = new WriteOperation(Guid.Empty, new()
{
    { ProductosES.Nombre, "iPhone 16 Pro" },
    { ProductosES.Precio, 1199.00m.STR() }
});

client.RunWriteOperation(ProductosES._SectionID, producto);
// ✓ Producto creado
// Importar productos en bloques
var externos = await http.GetFromJsonAsync<List<ProductoDTO>>(url);

var chunks = externos.Chunk(DinaupClientC.MaxItemsPerWriteOperation);

foreach (var chunk in chunks)
{
    var lote = chunk.Select(e => new WriteOperation(Guid.Empty, new()
    {
        { ProductosES.CodigoExterno, e.SKU },
        { ProductosES.Nombre, e.Nombre },
        { ProductosES.Precio, e.Precio.STR() }
    })).ToList();

    client.RunWriteOperation(ProductosES._SectionID, lote, false);
}
// ✓ Productos sincronizados por bloques
var cambios = new WriteOperation(productoId, new()
{
    { ProductosES.Precio, 999.00m.STR() }
});

client.RunWriteOperation(ProductosES._SectionID, cambios);
// ✓ Producto actualizado
// Actualizar precios masivamente
var cambios = productosIds.Select(id => new WriteOperation(id, new()
{
    { ProductosES.Precio, nuevoPrecio.STR() },
    { ProductosES.FechaActualizacion, DateTime.Now.STR() }
})).ToList();

client.RunWriteOperation(ProductosES._SectionID, cambios, false);
// ✓ 150 productos actualizados
// Factura con líneas en una llamada
var factura = new WriteOperation(Guid.Empty, new()
{
    { FacturasES.Numero, "F-2024-0042" },
    { FacturasES.ClienteID, clienteId.STR() },
    { FacturasES.Fecha, DateTime.Now.STR() }
});

var lineas = new List<WriteOperation>
{
    new(Guid.Empty, new() {
        { LineasES.Descripcion, "Consultoría" },
        { LineasES.Cantidad, 10.STR() },
        { LineasES.Precio, 80m.STR() }
    }),
    new(Guid.Empty, new() {
        { LineasES.Descripcion, "Desarrollo" },
        { LineasES.Cantidad, 25.STR() },
        { LineasES.Precio, 60m.STR() }
    })
};

client.RunWriteOperation(FacturasES._SectionID, factura, lineas);
// ✓ Factura + 2 líneas creadas
// Subir desde un array de bytes
var bytes = System.Text.Encoding.UTF8.GetBytes("contenido del archivo");

var upload = await client.File_UploadBytesAsync(bytes, "documento.txt");

Guid fileId = upload.FileId;
// ✓ Archivo subido
// Subir desde una URL externa
var upload = await client.File_UploadURLAsync(
    "https://ejemplo.com/imagen.png",
    "imagen.png"
);

Guid fileId = upload.FileId;
// ✓ Archivo importado desde URL
// Obtener URL firmada para lectura
var signed = await client.File_SignURLGetAsync(fileId);

var url = signed?.url_original;
// ✓ URL lista para usar
// Agregar un comentario (solo texto)
var params = new AnotationParameters(sectionId, rowId, AnnotationTypeE.Comments)
    .WithText("¡Hola! Este es mi comentario.");

await client.Annotation_PutAsync(params);
// ✓ Comentario agregado
// Subir archivo primero
var upload = await client.File_UploadBytesAsync(bytes, "documento.pdf");

// Agregar comentario con archivo
var params = new AnotationParameters(sectionId, rowId, AnnotationTypeE.Comments)
    .WithText("Adjunto el contrato firmado")
    .WithFile(upload.FileId);

await client.Annotation_PutAsync(params);
// ✓ Comentario con archivo adjunto
// Leer anotaciones de un registro
var resultado = await client.Annotations_GetAsync(
    sectionId,
    rowId,
    AnnotationTypeE.Comments
);

foreach (var anotacion in resultado.Annotations)
{
    var texto = anotacion.Text;
    var adjuntos = anotacion.AttachedFiles;
}
// Generar HTML de factura
var doc = new DynamicDocuments.PaginasInformesD.FacturaModernaC(ventaId);

var response = await doc.ExecuteAsync(client);

var html = response.Content;
// ✓ HTML de la factura generado
// Servicio con inyección de dependencias
public class ProductosService(DinaupClientC client)
{
    public async Task<List<ProductoRow>> GetProductosAsync()
    {
        var report = new APIProductosC();
        await report.ExecuteQueryAsync(client);
        return report.Rows;
    }

    public void AddProducto(string nombre, decimal precio)
    {
        var op = new WriteOperation(Guid.Empty, new() {
            { ProductosES.Nombre, nombre },
            { ProductosES.Precio, precio.STR() }
        });
        client.RunWriteOperation(ProductosES._SectionID, op);
    }
}
// Sincronizar productos desde API externa
public async Task SyncProductosAsync(List<ProductoExterno> externos)
{
    var operaciones = externos.Select(e => new WriteOperation(
        e.DinaupId ?? Guid.Empty,
        new() {
            { ProductosES.CodigoExterno, e.SKU },
            { ProductosES.Nombre, e.Nombre },
            { ProductosES.Precio, e.Precio.STR() }
        })).ToList();

    client.RunWriteOperation(ProductosES._SectionID, operaciones, false);
}
// ✓ Crea nuevos o actualiza existentes
// Worker para procesar tareas pendientes
public class TareasWorker : BackgroundService
{
    protected override async Task ExecuteAsync(CancellationToken ct)
    {
        while (ct.IsCancellationRequested == false)
        {
            var pendientes = await GetPendientesAsync();
            foreach (var tarea in pendientes)
                await ProcesarAsync(tarea);

            await Task.Delay(TimeSpan.FromMinutes(5), ct);
        }
    }
}
// Búsqueda de texto libre
report.QuerySearch = "iPhone Pro Max";

// Filtro IN (múltiples valores)
report.AddFilter(ProductosES.CategoriaId, new[] { categoria1Id, categoria2Id });

// OR implícito (mismo campo, múltiples llamadas)
report.AddFilter(PaisesES.Codigo, "=", "ES");
report.AddFilter(PaisesES.Codigo, "=", "IT");  // Devuelve ES e IT

// Filtro por relaciones encadenadas
var keyPath = $"{PedidosES._SectionID}.{PedidosES.ClienteId}.{ClientesD._SectionID}.{ClientesES.VIP}";
report.AddFilter(keyPath, "=", 1);

// Solapamiento de fechas
report.AddFilterDateRangeOverlapFilter(
    EventosES.FechaInicio, EventosES.FechaFin,
    rangeStart: new DateOnly(2024, 1, 1),
    rangeEnd: new DateOnly(2024, 12, 31)
);

// Incluir eliminados
report.AddFilter(ProductosES.Eliminado, "<>", -1);  // Todos
// DynamicSelector - Buscar relación automáticamente
var op = new WriteOperation(Guid.Empty, new() {
    { ProductosES.Nombre, "Mi producto" },
    { ProductosES.UnidadMedidaID, $"[{UnidadesMedidaES.TextoPrincipal}=Litros]" }
});

// Editar por campo alternativo (ej: SKU)
client.RunWriteOperation(
    ProductosD._SectionIDGUID, op,
    runScripts: false,
    identifierFieldKey: ProductosES.CodigoExterno
);

// Actualizar un solo campo (más legible)
await client.RunInlineWriteOperationAsync(
    ProductosD._SectionIDGUID, productoId,
    ProductosES.Precio, 1299.00m.STR()
);

// Limpiar relación (string vacío)
valores.Add(ProductosES.ClienteID, "");

// Verificar resultado
op.WriteOperationResult.RowID      // Guid del registro
op.WriteOperationResult.Confirmed  // bool
op.WriteOperationResult.AError     // string (si hay error)
// Obtener cabecera + líneas en una llamada
var factura = await FacturasD.GetRowByIdWithListAsync(client, facturaId);
Console.WriteLine($"Factura: {factura.MainRow.Numero}");
foreach (var linea in factura.ListRows) { }

// GetRowsAsync con labels de relaciones
var productos = await ProductosD.GetRowsAsync(client, params);
foreach (var p in productos)
{
    Console.WriteLine($"{p.TextoPrincipal}: {p.ReferenciaCliente.Label}");
}

// Variables de informe
var report = new VentasPorClienteC();
report.AddVariable("ClienteId", clienteId.ToString());
report.AddVariable("FechaDesde", "2024-01-01");

// Propiedades del informe
report.Rows           // List<RowC>
report.RowsDic        // Dictionary<Guid, RowC>
report.TotalResults   // int
report.ExistNextPage  // bool
// Verificar conexión
if (client.IsConnected) { /* OK */ }

// Connect síncrono (alternativa a ConnectAsync)
var client = DinaupClientC.Connect(endpoint, publicKey, secretKey);

// Conversión de enums
{ FacturasES.Estado, EstadoFacturaE.Borrador.INT().STR() }

// Deduplicación con SHA1
string sha1 = Dinaup.extensions.ToSHA1(contenido);

// URL firmada con parámetros
var url = await client.File_SignURLGetAsync(fileId, cachear: false);

// Propiedades de archivo subido
upload.FileData.Id        // Guid
upload.FileData.CRC       // SHA1
upload.FileData.IsImage   // bool
upload.FileData.url_1080  // Redimensionado
// Ejecutar como usuario específico
// Afecta a: autor de alta, histórico, anotaciones, filtros de sesión

// Solo userId
using (DinaupContext.WithUser(userId))
{
    client.RunWriteOperation(...);
}

// Con IP
using (DinaupContext.WithUser(userId, "192.168.1.1"))
{
    client.RunWriteOperation(...);
}

// Con IP y UserAgent
using (DinaupContext.WithUser(userId, "192.168.1.1", "Mozilla/5.0..."))
{
    client.RunWriteOperation(...);
}
El problema

Tus procesos viven en Excels
que ya no dan más de sí

Tu equipo lleva años construyendo lógica crítica en hojas de cálculo: precios, comisiones, stock, impuestos, reporting…

No escala

No soporta millones de filas ni varios usuarios a la vez sin bloquearse.

Sin trazabilidad

No hay control de cambios real ni auditoría de quién modificó qué.

Errores ocultos

Una fórmula rota puede pasar desapercibida durante semanas.

Integración imposible

Conectarlo con CRMs, ERPs o tiendas online es un parche constante.

Dinaup nace para conservar esa libertad de modelar, pero dentro de un sistema robusto, auditable e integrable.

Un ERP enlatado nunca encaja del todo

  • Proyectos de personalización largos y caros
  • Dependencia total del proveedor
  • Funciones que no usas y las que necesitas, a medias

Dinaup invierte el enfoque: no te obliga a encajar en su modelo, te da un modelo abierto.

El desarrollo a medida: un pozo sin fondo

  • Meses de análisis, desarrollo y pruebas
  • Mantenimiento eterno de backend y base de datos
  • Cambiar rápido sin romper algo, imposible

Dinaup te da el framework ya resuelto: motor de datos, informes, documentos y API listos.

Para quién es

¿Para quién es Dinaup?

Para empresas y equipos técnicos que necesitan flexibilidad sin renunciar a la robustez.

Para empresas que han crecido más rápido que su sistema

Si tu gestión vive en Excels, ERPs parcheados y aplicaciones sueltas:

  • Centralizas todo en un modelo consistente
  • Conservas la flexibilidad de Excel
  • Ganas trazabilidad y seguridad

Para equipos técnicos que no quieren reinventar el backend

Si desarrollas aplicaciones de negocio:

  • Capa de datos configurable sin SQL
  • Motor de informes y documentos incluido
  • API y SDK listos para usar

Tú te centras en la experiencia de usuario y la lógica avanzada.

Dinaup pone la base de datos, los informes, los documentos y la API.

"No adaptas tu empresa a un software: adaptas el software a tu empresa"

"Lo que antes eran 20 Excels sueltos ahora es un sistema único y auditado"

Tu negocio cambia.
Tu sistema también debería.

Empieza hoy a construir tu ERP a medida. Sin código, sin límites y sin compromiso.

Prueba gratuita Sin tarjeta de crédito Soporte incluido
Programa de partners

Crece con Dinaup

Únete a nuestra red de partners y ofrece a tus clientes soluciones de gestión de datos de primer nivel.

Nuevos ingresos

Ofrece mantenimiento, formación, soporte técnico, desarrollo de integraciones y mucho más.

Acceso a repositorios

Acelera tus desarrollos con aplicaciones ya creadas y herramientas internas de Dinaup.

Formación y soporte

Soporte prioritario y formaciones internas para dominar la plataforma.

Tres niveles de partner

Partner Support
Partner Developer
Partner Advanced
Ver listado de partners [email protected]
WhatsApp