From 2191a498d771041a31b2dfa05d433666c6317e58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Manuel=20G=C3=B3mez?= Date: Mon, 20 Apr 2026 10:21:30 +0200 Subject: [PATCH] Link Leads Lake records to campaign on each run - get_leads_this_month() now returns (count, [record_ids]) - update_campaign_leads_lake() updates the multipleRecordLinks field 'Leads Lake' in Google Ads Campaigns with the lead IDs found for that course this month - run.py calls the update after fetching leads per campaign Co-Authored-By: Claude Sonnet 4.6 --- airtable_client.py | 13 +++++++++---- run.py | 5 +++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/airtable_client.py b/airtable_client.py index a9f6fff..571bdf3 100644 --- a/airtable_client.py +++ b/airtable_client.py @@ -147,9 +147,9 @@ class AirtableClient: return {"created": created, "updated": updated} - def get_leads_this_month(self, cursoid_text: str) -> int: + def get_leads_this_month(self, cursoid_text: str) -> tuple[int, list[str]]: """ - Cuenta todos los leads validados del mes actual para un curso. + Devuelve (count, [record_ids]) de leads del mes actual para un curso. Filtra por attr_cursoid (que coincide con CursoID Text de la campaña). """ now = datetime.now() @@ -161,5 +161,10 @@ class AirtableClient: f"{{creado}}>='{mes_inicio}'" f")" ) - records = self.leads.all(formula=formula) - return len(records) + records = self.leads.all(formula=formula, fields=["airtable id"]) + ids = [r["id"] for r in records] + return len(ids), ids + + def update_campaign_leads_lake(self, campaign_airtable_id: str, lead_ids: list[str]) -> None: + """Actualiza el campo 'Leads Lake' de una campaña con los IDs de leads del mes.""" + self.campaigns.update(campaign_airtable_id, {"Leads Lake": lead_ids}) diff --git a/run.py b/run.py index 466d8f8..4cecafd 100644 --- a/run.py +++ b/run.py @@ -81,8 +81,9 @@ def run(): print(f"📚 {campaign['curso']}") print(f" Campaign ID: {cid} | PPL: {campaign['ppl']}€ | Cap: {campaign['capping_mensual']} leads") - # 1. Leads reales desde Airtable - leads = at.get_leads_this_month(campaign["cursoid_text"]) + # 1. Leads reales desde Airtable + vincular en campo Leads Lake + leads, lead_ids = at.get_leads_this_month(campaign["cursoid_text"]) + at.update_campaign_leads_lake(campaign["airtable_id"], lead_ids) # 2. Métricas de Google Ads metrics = gads.get_campaign_metrics(cid)