import requests API_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2NhdGlvbl9pZCI6IlVIRHQxTXJRSjZ3NHp6ZjdSNGF1IiwidmVyc2lvbiI6MSwiaWF0IjoxNzQwMDk0MTkxNjA1LCJzdWIiOiJJMzZreUgza1hiZnBBYUhQQkpRcCJ9.7vUSifWRm-a567M4OuzkXs3fSn_AGL3JiWP3Kc7JEMk" BASE_URL = "https://rest.gohighlevel.com/v1/contacts/" HEADERS = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } def get_all_contacts(): contacts = [] limit = 100 # max allowed by GHL start_after_id = None while True: params = {"limit": limit} if start_after_id: params["startAfterId"] = start_after_id response = requests.get(BASE_URL, headers=HEADERS, params=params) if response.status_code != 200: print(f"Error: {response.status_code} - {response.text}") break data = response.json() if "contacts" not in data or len(data["contacts"]) == 0: break contacts.extend(data["contacts"]) start_after_id = data["contacts"][-1]["id"] # move to next batch print(f"Fetched {len(contacts)} contacts so far...") return contacts if __name__ == "__main__": all_contacts = get_all_contacts() print(f"Total contacts retrieved: {len(all_contacts)}") # Example: print first contact if all_contacts: print(all_contacts[0])