Sample Datasets

Download realistic, safely anonymized sample data for Shopify, Amazon, Stripe, and more. Perfect for testing your workflows and validating our browser-based cleaning tools.

Zendesk Tickets Export Sample Dataset

This dataset contains 5,000 synthetic Zendesk support tickets exported in standard CSV format, featuring exact production columns: Ticket ID, Subject, Description, Status, Priority, Requester, Assignee, and Created. It simulates a realistic helpdesk environment with a mix of open, pending, and resolved tickets across multiple support queues. The critical Zendesk export quirk is that Description and Comments fields contain embedded CRLF (\r\n) line breaks from customer emails and multi-paragraph replies. Naive CSV parsers that don't respect RFC 4180 quoting rules will split a single ticket row into multiple invalid records at every newline, corrupting the dataset structure. The intentionally injected dirty data inventory includes: embedded CRLF newlines in 1,200 Description cells, 340 rows with Assignee set to null (unassigned tickets), and UTF-8 characters (é, ñ, ü) in Requester names without a BOM header to test encoding fallbacks. After cleaning and proper quote-handling, this yields exactly 5,000 valid ticket records. Ideal for: ETL pipeline testing, CSV parser validation, DuckDB text-loading demos, and NLP preprocessing on support logs. Load this file into the format-cleaner tool to strip CRLF artifacts and normalize the text fields.

OtherView dataset

HubSpot Contacts Export Sample Dataset

This dataset contains 8,500 synthetic HubSpot contact records with exact production export columns: First Name, Last Name, Email, Lifecycle Stage, Associated Company, Lead Status, and HubSpot Score. It represents a mid-market B2B SaaS database with contacts spanning multiple lifecycle stages from subscriber to customer. The HubSpot-specific quirk is that multi-checkbox custom properties and system fields like Lead Status are exported as semicolon-separated strings (e.g., New;Qualified;SQL) rather than comma-separated values. Data engineers unfamiliar with this behavior often split these fields incorrectly during ETL, destroying the multi-select taxonomy. The dirty data inventory includes: semicolon-delimited strings in 2,100 Lead Status cells, trailing whitespace in 890 Email addresses that would cause duplicate contact creation on re-import, and 420 rows where Lifecycle Stage is completely blank due to API-synced contacts bypassing the form submission flow. After deduplication and whitespace trimming, this yields 8,340 unique, import-ready contacts. Ideal for: CRM migration testing, HubSpot import validation, data warehouse schema design, and reverse-ETL dry runs. Run this dataset through the csv-deduplicator tool to identify and merge the whitespace-polluted email duplicates.

OtherView dataset

Salesforce Leads Export Sample Dataset

This dataset contains 6,200 synthetic Salesforce lead records using exact production columns: Lead ID, First Name, Last Name, Company, Email, LeadSource, Industry, and Status. It simulates a global enterprise lead database with diverse geographic and industry segmentation. The Salesforce-specific quirk involves strict picklist validation: fields like LeadSource and Industry must match exact predefined values in the Salesforce schema. Even a single invisible character will trigger INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST errors during API bulk imports, yet the values appear perfectly normal when visually inspected in Excel. The dirty data inventory includes: zero-width spaces (U+200B) injected into 780 LeadSource values, 215 rows with malformed 18-character Lead ID strings (missing the 3-character checksum suffix), and embedded commas in 1,400 Company names that test CSV quoting compliance. After stripping invisible Unicode characters and validating ID formats, this yields 6,200 clean leads ready for Bulk API upsert. Ideal for: Salesforce data loader testing, API integration debugging, picklist validation workflows, and data quality audits. Use the format-cleaner tool to detect and remove the zero-width spaces that would otherwise cause your Data Loader batch to fail.

OtherView dataset

Mailchimp Audience Export Sample Dataset

This dataset contains 12,000 synthetic Mailchimp subscriber records with exact production export columns: Email Address, First Name, Last Name, Date Added, OPTIN TIME, CONFIRM TIME, and Member Rating. It represents a mixed-source audience combining native double opt-in subscribers with API-imported contacts from third-party lead generation tools. The Mailchimp-specific quirk is that OPTIN TIME is frequently blank for imported contacts because they never went through Mailchimp's native double opt-in confirmation flow — they were added directly via API or CSV import. This causes pandas to_datetime() and SQL date-parsing functions to throw NaT (Not a Time) or NULL errors when calculating subscriber age or engagement cohorts. The dirty data inventory includes: 4,800 rows with completely blank OPTIN TIME values, inconsistent date formats mixing MM/DD/YYYY and YYYY-MM-DD across the Date Added column, and trailing spaces in 1,100 Email Address cells that break engagement rate calculations. After standardizing date formats and handling null opt-in timestamps, this yields 12,000 clean subscriber records with accurate engagement metadata. Ideal for: ESP migration dry runs, deliverability analysis, cohort segmentation testing, and email marketing analytics. Feed this file into the format-cleaner tool to normalize the mixed date formats.

OtherView dataset

GA4 Raw Event Data Sample Dataset

This dataset contains 15,000 synthetic Google Analytics 4 event records using exact BigQuery export schema columns: event_date, event_timestamp, event_name, user_pseudo_id, platform, device.category, and geo.country. It simulates a high-traffic e-commerce property with events spanning page views, purchases, and custom conversion events across web and mobile platforms. The GA4-specific quirk is that event_timestamp is stored in microseconds (16-digit integers like 1698765432100000), not milliseconds. Data engineers who mistakenly treat these values as Unix epoch milliseconds will shift all event dates to the year 53,000+, completely destroying time-series analysis and sessionization logic. The dirty data inventory includes: 340 rows with user_pseudo_id set to null (from bot traffic or consent-denied sessions), microsecond timestamps that require division by 1,000,000 before conversion, and 2,100 event_name values containing custom event parameters encoded as nested JSON strings that break flat-file parsers. After converting timestamps to standard datetime format and handling null pseudo IDs, this yields 14,660 valid user events ready for session reconstruction. Ideal for: analytics engineering tests, dbt model validation, BigQuery migration rehearsals, and attribution modeling demos. Load this dataset into the json-to-csv tool to flatten the nested event parameter JSON strings into discrete columns.

GoogleView dataset

Stripe Balance Transactions Export Sample Dataset

Stripe's Balance Transactions export from the Dashboard Reports panel is delivered as a UTF-8 CSV with exact production columns: id, created, currency, amount, fee, net, type, description, source, and reporting_category. This dataset contains 7,500 synthetic balance transaction records spanning charges, refunds, disputes, payouts, and adjustments — mirroring a high-volume SaaS billing environment. The critical Stripe accounting quirk is that all created timestamps are forced to UTC regardless of your dashboard timezone setting, and the amount and fee columns store values in the smallest currency unit (cents for USD). More dangerously, the sign convention inverts depending on type: for charge rows, amount is positive and fee is negative, but for refund and dispute rows, amount becomes negative while fee becomes positive (the fee is returned). Naive SUM aggregation across all transaction types double-counts fee reversals as additional charges. The structural dirty data inventory includes: 1,840 description fields containing unescaped commas that break delimiter-based parsers, 420 rows with embedded CRLF line breaks in multiline dispute descriptions, and missing UTF-8 BOM causing € and £ symbols to render as mojibake. Expected Output: Yields exactly 7,500 valid transactions with accurate net revenue figures. Ideal for: ETL testing, DuckDB demos, Power BI, Excel Power Query, CI pipelines. Load this file into the stripe-formatter tool to correctly net the fee reversals before building your P&L.

StripeView dataset

Facebook Ads Campaign Export Sample Dataset

Facebook Ads Manager exports campaign-level reports as UTF-8 CSV files with exact production headers: Campaign name, Campaign ID, Ad Set name, Amount spent (USD), Impressions, Clicks (all), CTR (all), CPC (all) (USD), Reporting starts, and Reporting ends. This dataset contains 3,200 synthetic campaign performance rows spanning 14 days of multi-objective ad delivery. The Facebook Ads export quirk that breaks downstream analytics is that Amount spent (USD) and CPC (all) (USD) values inconsistently include the $ currency symbol prefix depending on the account's regional settings. When pandas or DuckDB attempts SUM('Amount spent (USD)'), the $ prefix forces the entire column to be parsed as string type, returning zero or throwing a type-cast error. Additionally, Reporting starts and Reporting ends use MM/DD/YYYY format while other date columns may use YYYY-MM-DD. The dirty data inventory includes: 890 Amount spent (USD) cells prefixed with $ (e.g., $1,234.56), 340 rows where date ranges span different reporting windows, and 215 Campaign name values containing unquoted commas that split into phantom columns. Expected Output: Yields 3,200 clean campaign-day rows ready for ROAS pivot analysis. Ideal for: ETL testing, DuckDB demos, Power BI, Excel Power Query, CI pipelines. Run this dataset through the ads-roas-pivot tool to strip currency formatting and build a clean daily spend-to-revenue pivot table.

FacebookView dataset

Google Ads Keyword Report Sample Dataset

Google Ads exports keyword performance reports from the Report Editor with exact production columns: Campaign, Ad group, Keyword, Match type, Clicks, Impressions, Cost, Conversions, and Conv. value. This dataset contains 4,800 synthetic keyword performance rows representing a mid-market PPC account. The Google Ads export quirk that silently destroys automated parsers is that the CSV file prepends two metadata rows before the actual header row: Row 1 contains the quoted report title (e.g., 'Keywords performance report') and Row 2 contains the date range string. When pandas reads the file with pd.read_csv() using default settings, it treats the report title as the header row, causing every column name to be wrong and all downstream df['Clicks'] references to throw KeyError. You must use skiprows=2 or programmatically detect and skip metadata rows. The structural dirty data inventory includes: the 2-row quoted metadata header that must be skipped, 1,120 rows with zero impressions and zero clicks, Cost values formatted with currency symbols, and 380 Keyword values containing special characters like + and [exact match] brackets. Expected Output: Yields 3,680 actionable keyword performance rows, 2 metadata rows skipped. Ideal for: ETL testing, DuckDB demos, Power BI, Excel Power Query, CI pipelines. Use the format-cleaner tool to automatically detect and strip the metadata header rows.

GoogleView dataset

WooCommerce Orders Export Sample Dataset

WooCommerce's native order export from the admin panel generates UTF-8 CSV files with exact production headers: Order ID, Date Created, Status, Currency, Total, Billing First Name, Billing Last Name, Billing Email, Line Items, Order Notes, and Shipping Method. This dataset contains 6,300 synthetic order records. The WooCommerce export quirk that causes CSV structural collapse is that the Line Items and Order Notes fields frequently contain raw HTML markup (<br>, <p>, <strong>) and embedded CRLF line breaks from product descriptions and checkout notes. When a customer leaves a multi-paragraph order note or a product description contains HTML tags, the entire CSV row structure fractures — naive parsers split a single order into 3-5 invalid rows at every unescaped newline. The structural dirty data inventory includes: 2,100 Order Notes cells with embedded CRLF line breaks and raw HTML tags, 890 Line Items cells containing quoted commas within product names (e.g., 'Widget A, Large, Blue'), and missing UTF-8 BOM causing accented customer names (Müller) to display as mojibake. Expected Output: Yields 6,300 clean order records with intact multiline content. Ideal for: ETL testing, DuckDB demos, Power BI, Excel Power Query, CI pipelines. Process this file through the woocommerce-cleaner tool to strip HTML artifacts and collapse multiline order notes.

OtherView dataset

Klaviyo Master Subscriber List Sample Dataset

Klaviyo's profile export generates UTF-8 CSV files with exact production columns: Email, First Name, Last Name, Person ID, $consent, $bounce_type, Subscribe Date, and SMS Consent. This dataset contains 9,400 synthetic subscriber profiles spanning email, SMS, and multi-channel opt-ins. The Klaviyo-specific quirk is that the $consent column exports as a semicolon-delimited string representation of the consent object (e.g., 'email; sms' or 'email'), not as a simple boolean. Additionally, $bounce_type contains values like 'Hard', 'Soft', or is completely blank for never-bounced profiles. The structural dirty data inventory includes: 1,240 $consent cells with semicolon-delimited multi-channel values that must be split into discrete boolean columns, 680 rows with $bounce_type set to 'Hard' that should be excluded, 890 duplicate Email addresses (same subscriber appearing in multiple lists with different Person ID values), and 420 rows where Subscribe Date is completely blank due to API-synced profiles. Expected Output: Yields 7,970 unique, deliverable subscriber records. Ideal for: ETL testing, DuckDB demos, Power BI, Excel Power Query, CI pipelines. Run this dataset through the klaviyo-prep tool to split the semicolon-delimited $consent field and filter hard-bounced profiles.

KlaviyoView dataset