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.
| Capability | SaaSDog | OneSchema | Flatfile |
|---|---|---|---|
| Data Import | Full | Full | Full |
| Data Export | Full | None | Limited |
| Self-Hosted Deployment | Yes | No | No |
| Multi-Cloud (AWS/Azure/GCP) | Yes | No | No |
| Cron Scheduling | Built-in | No | No |
| Export Filter DSL | Full | No | No |
| Relative Date Filters | Yes | No | No |
| Presigned URL Uploads | Yes | N/A | N/A |
| Source Code Access | Full | No | No |
| Extend with AI Tools | Yes | No | No |
| Data Sovereignty | You control | Their cloud | Their cloud |
| Embeddable UI Included | Yes | Yes | Yes |
| UI Source Code | Full | No | No |
| Per-Record Pricing | None | Yes | Yes |
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>API Overview
Import API
/imports/request-uploadGet a presigned URL for direct file upload to cloud storage
/imports/confirm-uploadValidate the uploaded file and get column metadata
/imports/previewPreview all records with per-row validation status
/imports/executeExecute 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
/exportsCreate and trigger an export job
/exports/previewPreview export results before running
/exports/{run_id}/resultCheck export job status
/exports/{run_id}/downloadGet pre-signed download URL
Job Management & Scheduling
/jobsCreate a job definition with optional cron schedule
/jobs/{id}/runManually trigger a job run
/jobs/{id}/runsGet run history with date filtering
/jobsList 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
eqEqualsneNot equalsgt / gteGreater thanlt / lteLess thaninIn listbetweenRangecontainsSubstringilikeCase-insensitiveRelative Date Filters
Use relative date values for time-based exports that stay current without manual date updates:
last_7_daysPast weeklast_30_daysPast monthlast_90_daysPast quarterthis_monthCurrent monthlast_monthPrevious monththis_quarterCurrent quarterthis_yearCurrent yearImport 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
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