Both tools do data profiling and both are free, so they get compared. They’re built for different jobs: one helps a person understand a data set, the other keeps a database under test.
DataKitchen makes TestGen. The ydata-profiling facts below are from its own GitHub README, documentation, and PyPI page, checked November 3, 2026.
Side by side
| ydata-profiling | DataOps TestGen | |
|---|---|---|
| What it is | A Python library | A self-hosted application with a UI, API, and MCP server |
| Where data profiling runs | In Python, on a pandas or Spark DataFrame | Inside the database, as SQL |
| Scope of one run | One DataFrame | Every table in a table group |
| Output | An HTML report, a Jupyter widget, or JSON | Stored results in TestGen’s database, a Data Catalog, Excel export |
| History | Each report is its own file; a compare feature puts two data sets in one report | Every run kept, with profile comparison between runs |
| After the profile | You read the report | 32 hygiene detectors, tests from 34 test types, monitors, quality scores |
| Scheduling | Your own code or scheduler | Built-in schedules and a REST API |
| Who it suits | A data scientist or analyst exploring data | A data team keeping a database tested |
| License | MIT | Apache 2.0; Enterprise from $100 per user and $100 per connection per month |
ydata-profiling’s Spark support covers a subset of its features: univariate analysis, head and tail samples, and Pearson and Spearman correlations, with missing-value analysis and interactions listed as coming, per its big data page.
The rename
As of November 2026, the package is moving. PyPI shows ydata-profiling 4.18.4, released April 22, 2026, with a notice that it “is now fg-data-profiling” and will receive no further updates. fg-data-profiling 4.20.0 was released September 11, 2026, published by YData Labs under the MIT license. Its README says to change imports from ydata_profiling to data_profiling. If you pin ydata-profiling in a requirements file, plan the switch.
The same SQL Server table, both ways
With ydata-profiling, you bring the data to Python:
import pandas as pd
from sqlalchemy import create_engine
from ydata_profiling import ProfileReport # data_profiling after the rename
engine = create_engine(
"mssql+pyodbc://reader:***@sqlprod/Sales?driver=ODBC+Driver+18+for+SQL+Server"
)
df = pd.read_sql("SELECT * FROM dbo.Orders", engine)
ProfileReport(df, title="dbo.Orders", minimal=True).to_file("orders.html")
Every row of dbo.Orders crosses the network into Python memory. For a large table, the documentation recommends minimal=True, which turns off the most expensive computations, or data profiling on a random sample. You get a detailed HTML report on that one table.
With TestGen, the data stays in SQL Server. You create a SQL Server connection with a read-only SQL login, define a table group for the dbo schema, and run data profiling. TestGen sends aggregate queries to SQL Server and stores only the results. Then it generates tests, such as Required Entry on CustomerID or Value Match on Status, and you schedule them after each load.
Which to pick
- One file or DataFrame, in a notebook, today: ydata-profiling. One line, rich charts and correlations.
- A whole database, kept tested: TestGen. Data profiling runs in place, and the profile becomes tests and monitors.
- Both: a data scientist explores with ydata-profiling; the data team keeps the source tables under TestGen.
For the wider field of free profilers, see the open-source data profiling tools answer. For the definition, see what data profiling is. To try TestGen, start at the data profiling install page.