""" HubSpot PLG pipeline — loads contacts, email metrics, list membership, workflow events, form submissions, and campaign specs into DuckDB (local) or BigQuery (production). Usage: python hubspot_plg_pipeline.py # DuckDB (default) python hubspot_plg_pipeline.py --destination bigquery """ import argparse import logging import dlt from hubspot_plg import hubspot_plg logging.basicConfig( level=logging.INFO, format="%(asctime)s [%(levelname)s] %(name)s - %(message)s", ) logger = logging.getLogger("hubspot_plg_pipeline") def run(destination: str = "duckdb") -> None: pipeline = dlt.pipeline( pipeline_name="hubspot_plg", dataset_name="hubspot_plg_data", destination=destination, progress="log", ) source = hubspot_plg() logger.info("Running hubspot_plg pipeline -> %s", destination) load_info = pipeline.run(source) logger.info("Load info:\n%s", load_info) row_counts = pipeline.last_trace.last_normalize_info logger.info("Row counts:\n%s", row_counts) if __name__ == "__main__": parser = argparse.ArgumentParser(description="HubSpot PLG pipeline") parser.add_argument( "--destination", default="duckdb", choices=["duckdb", "bigquery"], help="dlt destination (default: duckdb)", ) args = parser.parse_args() run(destination=args.destination)