Available Now

Import/Export Engine

A production-ready, self-hosted microservice for CSV imports and exports. Presigned URL uploads, multi-phase validation, cron scheduling, flexible export filtering, and multi-cloud deployment — all in one package.

See It In Action

Watch the full demo to see presigned URL uploads, multi-phase import validation, and export filtering in action.

How We Compare

SaaSDog gives you the platform to own. Unlike SaaS-only vendors, you get full source code, self-hosting, and the freedom to extend with your favorite AI coding tools.

CapabilitySaaSDogOneSchemaFlatfile
Data ImportFullFullFull
Data ExportFullNoneLimited
Self-Hosted DeploymentYesNoNo
Multi-Cloud (AWS/Azure/GCP)YesNoNo
Cron SchedulingBuilt-inNoNo
Export Filter DSLFullNoNo
Relative Date FiltersYesNoNo
Presigned URL UploadsYesN/AN/A
Source Code AccessFullNoNo
Extend with AI ToolsYesNoNo
Data SovereigntyYou controlTheir cloudTheir cloud
Embeddable UI IncludedYesYesYes
UI Source CodeFullNoNo
Per-Record PricingNoneYesYes

Built for AI-Assisted Development

You get the full source code with clean architecture and comprehensive documentation. Add new entities, customize validation rules, or extend the API using Claude Code, Cursor, GitHub Copilot, or any AI coding tool. The hexagonal architecture makes it straightforward for both humans and AI to understand and modify.

Key Features

Presigned URL Uploads

Clients upload files directly to cloud storage via presigned URLs, bypassing API gateway size limits. No file size constraints.

Multi-Phase Import

Validate, preview per-row results, then execute. Get immediate feedback on errors with row and field details before committing.

First-Class Exports

Export with a flexible filter DSL, nested field access, column aliases, relative date ranges, and multiple output formats.

Cron Scheduling

Schedule recurring imports and exports with cron expressions. Built-in APScheduler integration with job history tracking.

Self-Hosted & Multi-Cloud

Deploy on your own infrastructure with Terraform. Supports AWS, Azure, and GCP. Keep data in your environment.

Security Built-In

SQL injection and XSS detection during validation. JWT authentication with multi-tenant isolation. Presigned URLs for secure transfers.

Async Job Processing

Long-running operations run asynchronously with status tracking, progress monitoring, and detailed error reporting.

Open Architecture

Hexagonal architecture with pluggable adapters. Extend with your own entity handlers, storage backends, or auth providers.

Embeddable Micro-Frontend UI

Ships with a complete React UI that you can embed directly into your application via Module Federation — or run standalone. No need to build your own import/export interface.

Dashboard

System health overview, job statistics, recent activity, and quick-action cards for exports, imports, and job management.

Export Builder

Visual export wizard with field selection, column renaming, advanced filtering with relative dates, and live preview before execution.

Import Wizard

Multi-step import flow: upload a file, map columns to fields, preview per-row validation results, then execute with create/update/upsert modes.

Job Management

View all job definitions, run history, cron schedules, and status. Run, clone, edit, or delete jobs from a single interface.

Flexible Embedding Options

Full Standalone

Complete app with layout, sidebar, and routing. Deploy on its own or in an iframe.

Micro-Frontend Routes

Drop routes into your existing React Router. Host app provides the layout and navigation.

Content-Only

Smallest footprint — just the content, no chrome. Your app controls everything around it.

// Embed in your host application via Module Federation
import { ConfigProvider, MicroFrontend } from 'importExport/federation'

<ConfigProvider config={{
  apiBaseUrl: 'https://api.yourapp.com',
  getAuthToken: () => getToken(),
  routePrefix: '/import-export',
}}>
  <MicroFrontend />
</ConfigProvider>
React 19
TypeScript
Vite + Module Federation
Tailwind CSS

API Overview

Import API

POST
/imports/request-upload

Get a presigned URL for direct file upload to cloud storage

POST
/imports/confirm-upload

Validate the uploaded file and get column metadata

POST
/imports/preview

Preview all records with per-row validation status

POST
/imports/execute

Execute the import (create, update, upsert, or delete)

Presigned URL Flow

Files never pass through your API gateway. The client requests a presigned URL, uploads directly to S3/Azure/GCP, then confirms the upload for server-side validation. This removes file size limits and reduces server load.

Export API

POST
/exports

Create and trigger an export job

POST
/exports/preview

Preview export results before running

GET
/exports/{run_id}/result

Check export job status

GET
/exports/{run_id}/download

Get pre-signed download URL

Job Management & Scheduling

POST
/jobs

Create a job definition with optional cron schedule

POST
/jobs/{id}/run

Manually trigger a job run

GET
/jobs/{id}/runs

Get run history with date filtering

GET
/jobs

List all jobs for the authenticated client

Export Filter DSL

Build complex queries with our flexible filter syntax. Supports nested fields, relative date ranges, multiple operators, and logical combinations.

{
  "entity": "bill",
  "fields": [
    {"field": "id"},
    {"field": "amount", "as": "Total Amount"},
    {"field": "vendor.name", "as": "Vendor"}
  ],
  "filters": {
    "operator": "and",
    "filters": [
      {"field": "amount", "operator": "gt", "value": 1000},
      {"field": "created_at", "operator": "gte", "value": "relative:last_30_days"}
    ]
  },
  "sort": [{"field": "date", "direction": "desc"}],
  "limit": 100
}

Supported Operators

eqEquals
neNot equals
gt / gteGreater than
lt / lteLess than
inIn list
betweenRange
containsSubstring
ilikeCase-insensitive

Relative Date Filters

Use relative date values for time-based exports that stay current without manual date updates:

last_7_daysPast week
last_30_daysPast month
last_90_daysPast quarter
this_monthCurrent month
last_monthPrevious month
this_quarterCurrent quarter
this_yearCurrent year

Import Validation

Files are validated before import with detailed error reporting. Know exactly which row and field has issues. Supports create, update, upsert, and delete operations in a single file using an action column.

// Validation error response
{
  "status": "validation_failed",
  "validation_errors": [
    {
      "row": 2,
      "field": "amount",
      "message": "Field 'amount' must be a number"
    },
    {
      "row": 5,
      "field": "date",
      "message": "Field 'date' must be in YYYY-MM-DD format"
    }
  ],
  "error_count": 2
}

Security Validation

All imports are scanned for SQL injection patterns, script injection, and XSS attempts. Malicious content is rejected before it reaches your database.

Technology Stack

Python 3.11+
FastAPI
SQLAlchemy 2
PostgreSQL
APScheduler
Docker
Terraform
AWS/Azure/GCP

Clean Architecture

Built with hexagonal architecture principles. Swap databases, cloud providers, or auth systems without touching business logic.

Domain Layer

Core business entities and logic. No external dependencies.

Services Layer

Business logic orchestration. Coordinates between layers.

Infrastructure Layer

Database, cloud storage, queues, schedulers. Easily swappable.

API Layer

REST endpoints with OpenAPI spec. Auto-generated docs.

Own your import/export infrastructure

Get production-ready import/export with full source code. Deploy on your infrastructure, extend with AI coding tools, and stop paying per-record fees to SaaS vendors.

Book a Demo