<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Airflow on Jonathan Franklin</title><link>https://jonnie.github.io/tags/airflow/</link><description>Recent content in Airflow on Jonathan Franklin</description><generator>Hugo</generator><language>en</language><lastBuildDate>Fri, 12 May 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://jonnie.github.io/tags/airflow/index.xml" rel="self" type="application/rss+xml"/><item><title>Ads &amp; Affiliate Revenue Platform</title><link>https://jonnie.github.io/work/ads-revenue-platform/</link><pubDate>Fri, 12 May 2023 00:00:00 +0000</pubDate><guid>https://jonnie.github.io/work/ads-revenue-platform/</guid><description>&lt;h2 id="problem"&gt;Problem&lt;/h2&gt;&#10;&lt;p&gt;Pricesearcher bought traffic through Google, Bing and Facebook advertising and earned revenue through affiliate and traffic partners. Comparing advertising costs with that income required joining records from separate systems with different identifiers, timezones and reporting periods. Campaign- and keyword-level reporting helped inform bid and budget decisions.&lt;/p&gt;&#10;&lt;h2 id="architecture"&gt;Architecture&lt;/h2&gt;&#10;&lt;p&gt;Airflow and Lambda jobs imported campaign, ad-group and keyword data alongside revenue and conversion data from affiliate partners. A Python reporting API joined that data for an internal Next.js/Tailwind dashboard. The surrounding platform also used S3-hosted landing-page variants and SNS-to-Slack notifications.&lt;/p&gt;</description></item><item><title>Data Orchestration &amp; Platform Operations</title><link>https://jonnie.github.io/work/data-orchestration/</link><pubDate>Tue, 17 May 2022 00:00:00 +0000</pubDate><guid>https://jonnie.github.io/work/data-orchestration/</guid><description>&lt;h2 id="problem"&gt;Problem&lt;/h2&gt;&#10;&lt;p&gt;Pricesearcher&amp;rsquo;s feed ingestion, product building, indexing and warehouse jobs depended on scheduled workflows. That orchestration layer needed to move from Airflow 1 to Airflow 2 while continuing to support existing jobs. Monitoring also needed to reflect changing feed schedules: a weekly feed should not trigger the same freshness warnings as a daily one.&lt;/p&gt;&#10;&lt;h2 id="architecture"&gt;Architecture&lt;/h2&gt;&#10;&lt;p&gt;Airflow scheduled the data workflows, including validation tasks around the pipelines. SNS and CloudWatch events reached Slack through Lambda functions. Supporting services included query expansion, merchant and brand enrichment, Spark warehouse uploads and Terraform-managed infrastructure.&lt;/p&gt;</description></item></channel></rss>