import os import requests import json from dotenv import load_dotenv load_dotenv() NOTION_API_KEY = os.getenv("NOTION_API_KEY") NOTION_DB_ID = "2ec88f4285448014ab38ea664b4c2b81" # Verticals DB PRODUCT_DB_ID = "2ec88f42854480f0b154f7a07342eb58" # Product Categories DB (from user link) headers = { "Authorization": f"Bearer {NOTION_API_KEY}", "Notion-Version": "2022-06-28", "Content-Type": "application/json" } # 1. Fetch Product Map (ID -> Name) product_map = {} def fetch_products(): url = f"https://api.notion.com/v1/databases/{PRODUCT_DB_ID}/query" response = requests.post(url, headers=headers, json={"page_size": 100}) if response.status_code == 200: results = response.json().get("results", []) for p in results: p_id = p["id"] # Name property might be "Name" or "Product Category" props = p["properties"] name = "Unknown" if "Name" in props: name = props["Name"]["title"][0]["plain_text"] if props["Name"]["title"] else "N/A" elif "Product Category" in props: name = props["Product Category"]["title"][0]["plain_text"] if props["Product Category"]["title"] else "N/A" product_map[p_id] = name # Also map the page ID itself if used in relations else: print(f"Error fetching products: {response.status_code}") # 2. Check Verticals with Relation Resolution def check_vertical_relations(search_term): url = f"https://api.notion.com/v1/databases/{NOTION_DB_ID}/query" payload = { "filter": { "property": "Vertical", "title": { "contains": search_term } } } resp = requests.post(url, headers=headers, json=payload) if resp.status_code == 200: results = resp.json().get("results", []) if not results: print(f"āŒ No vertical found for '{search_term}'") return for page in results: props = page["properties"] title = props["Vertical"]["title"][0]["plain_text"] # Resolve Primary pp_ids = [r["id"] for r in props.get("Primary Product Category", {}).get("relation", [])] pp_names = [product_map.get(pid, pid) for pid in pp_ids] # Resolve Secondary sp_ids = [r["id"] for r in props.get("Secondary Product", {}).get("relation", [])] sp_names = [product_map.get(pid, pid) for pid in sp_ids] print(f"\nšŸ”¹ VERTICAL: {title}") print(f" Primary Product (Rel): {', '.join(pp_names)}") print(f" Secondary Product (Rel): {', '.join(sp_names)}") # Pains/Gains short check pains = props.get("Pains", {}).get("rich_text", []) print(f" Pains Length: {len(pains[0]['plain_text']) if pains else 0} chars") else: print(f"Error fetching vertical: {resp.status_code}") # Run print("Fetching Product Map...") fetch_products() print(f"Loaded {len(product_map)} products.") print("\nChecking Verticals...") targets = ["Hospital", "Hotel", "Logistics", "Manufacturing", "Retail", "Reinigungs", "Dienstleister", "Facility"] for t in targets: check_vertical_relations(t)