30 SQL Interview Questions for Marketing Analysts (With Answers)

Atticus Li·

SQL interview questions for marketing analyst roles have become the single biggest gatekeeping factor in analytics hiring. As someone who has conducted 100+ technical interviews for analytics roles at companies ranging from Series B startups to Fortune 500 marketing teams, I can tell you this with certainty: the candidates who fail SQL screens almost never fail on syntax — they fail because they cannot translate a marketing problem into a query.

Whether you are preparing for a marketing analyst SQL test at Google, a mid-market SaaS company, or a DTC brand scaling its data team, this guide gives you the 30 most common SQL questions for analytics interviews, organized by difficulty, with real marketing context and the answers interviewers actually want to see.

Why SQL Matters in Marketing Analyst Interviews

Every modern marketing team sits on a mountain of data — campaign performance logs, customer event streams, attribution tables, CRM exports, ad platform data. The marketing analysts who get hired are the ones who can self-serve from that mountain without waiting on an engineering ticket.

According to LinkedIn's 2025 Jobs on the Rise report, SQL remains the single most requested technical skill in marketing analytics job postings, appearing in over 74% of listings. From my experience on hiring panels, here is what we are actually evaluating when we give you a SQL question:

Can you think in sets? Marketing problems are population-level problems. We need people who naturally think about cohorts, segments, and aggregations.

Do you understand the data model? Knowing JOINs is table stakes. Knowing which JOIN to use when campaign data has a many-to-many relationship with channels — that is what separates strong candidates.

Can you handle ambiguity? Real marketing data is messy. We deliberately leave questions slightly under-specified to see if you ask clarifying questions.

Let us get into the questions. For each one, I will give you the question as an interviewer would phrase it, the SQL answer, and what makes a response stand out.

Beginner SQL Questions (1–10)

These questions test foundational SQL knowledge using marketing-relevant tables. Expect these in phone screens and first-round assessments.

Q1: Retrieve all campaigns launched in Q1 2026

Interviewer framing: "We have a campaigns table. Pull everything from Q1 this year."

SELECT * FROM campaigns WHERE launch_date >= '2026-01-01' AND launch_date < '2026-04-01';

What interviewers look for: Using a date range instead of EXTRACT(QUARTER...) — the range approach is sargable and uses indexes properly. Bonus points if you ask whether launch_date is a DATE or TIMESTAMP.

Q2: Count customers by acquisition channel

SELECT acquisition_channel, COUNT(*) AS customer_count FROM customers GROUP BY acquisition_channel ORDER BY customer_count DESC;

What interviewers look for: Aliasing for readability, ordering by count so the results are immediately useful, and using COUNT(*) vs COUNT(customer_id) consciously.

Q3: Find campaigns with a CTR above 3%

SELECT campaign_name, clicks, impressions, ROUND(clicks * 100.0 / NULLIF(impressions, 0), 2) AS ctr FROM campaign_performance WHERE impressions > 0 AND (clicks * 100.0 / NULLIF(impressions, 0)) > 3.0;

Standout answer: Using NULLIF to guard against division by zero. Many candidates crash here.

Q4: List the top 5 email campaigns by open rate

SELECT campaign_name, ROUND(opens * 100.0 / NULLIF(sends, 0), 2) AS open_rate FROM email_campaigns WHERE sends > 100 ORDER BY open_rate DESC LIMIT 5;

What interviewers look for: Filtering out low-volume campaigns (sends > 100) shows you understand statistical noise in marketing metrics.

Q5: Join campaign data with channel data

SELECT c.campaign_name, ch.channel_name, c.spend, c.revenue FROM campaigns c INNER JOIN channels ch ON c.channel_id = ch.channel_id;

Standout answer: Asking whether you should use INNER JOIN or LEFT JOIN — because some campaigns may have unmapped channels, and in marketing data, that is common.

Q6: Find customers who have never made a purchase

SELECT c.customer_id, c.email FROM customers c LEFT JOIN orders o ON c.customer_id = o.customer_id WHERE o.customer_id IS NULL;

What interviewers look for: LEFT JOIN with NULL check pattern, rather than a subquery. Both work, but this shows JOIN fluency.

Q7: Calculate total spend per channel

SELECT channel_name, SUM(spend) AS total_spend FROM campaigns GROUP BY channel_name ORDER BY total_spend DESC;

Q8: Find duplicate email addresses in a leads table

SELECT email, COUNT(*) AS occurrences FROM leads GROUP BY email HAVING COUNT(*) > 1 ORDER BY occurrences DESC;

Why this matters in marketing: Duplicate leads inflate funnel metrics and waste ad spend on retargeting. This is a real cleanup task.

Q9: Get the most recent order for each customer

SELECT customer_id, MAX(order_date) AS last_order_date FROM orders GROUP BY customer_id;

Q10: Calculate month-over-month campaign spend

SELECT DATE_TRUNC('month', spend_date) AS month, SUM(spend) AS monthly_spend FROM campaign_spend GROUP BY DATE_TRUNC('month', spend_date) ORDER BY month;

What interviewers look for: DATE_TRUNC usage and awareness that date grouping is essential for marketing reporting cadences.

Intermediate SQL Questions (11–20)

These questions appear in second-round interviews and take-home assessments. They test your ability to combine techniques and apply them to real marketing problems like cohort analysis and attribution.

Q11: Rank campaigns by ROI within each channel

SELECT channel_name, campaign_name, (revenue - spend) / NULLIF(spend, 0) AS roi, RANK() OVER (PARTITION BY channel_name ORDER BY (revenue - spend) / NULLIF(spend, 0) DESC) AS roi_rank FROM campaigns;

What interviewers look for: Window functions. If you reach for a self-join or correlated subquery instead of RANK() OVER, it signals you are behind on modern SQL.

Q12: Calculate a 7-day rolling average of daily ad spend

SELECT spend_date, daily_spend, AVG(daily_spend) OVER (ORDER BY spend_date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS rolling_7d_avg FROM daily_ad_spend;

Standout answer: Specifying ROWS BETWEEN instead of RANGE BETWEEN, and explaining why — ROWS gives a true 7-day window even with missing dates.

Q13: Build a simple cohort retention table

Interviewer framing: "Show me what percentage of users who signed up each month came back and made a purchase in the following months."

WITH cohorts AS (SELECT customer_id, DATE_TRUNC('month', signup_date) AS cohort_month FROM customers), activity AS (SELECT o.customer_id, DATE_TRUNC('month', o.order_date) AS activity_month FROM orders o) SELECT c.cohort_month, a.activity_month, COUNT(DISTINCT a.customer_id) AS active_users, COUNT(DISTINCT a.customer_id) * 100.0 / COUNT(DISTINCT c.customer_id) AS retention_pct FROM cohorts c LEFT JOIN activity a ON c.customer_id = a.customer_id AND a.activity_month >= c.cohort_month GROUP BY c.cohort_month, a.activity_month ORDER BY c.cohort_month, a.activity_month;

This is a make-or-break question. Cohort analysis is the bread and butter of marketing analytics. If you cannot write this from memory, practice until you can.

Q14: Categorize customers by lifetime spend tier

SELECT customer_id, total_spend, CASE WHEN total_spend >= 1000 THEN 'VIP' WHEN total_spend >= 250 THEN 'Regular' ELSE 'Low Value' END AS spend_tier FROM (SELECT customer_id, SUM(order_total) AS total_spend FROM orders GROUP BY customer_id) customer_totals;

Q15: Find the first-touch attribution channel for each customer

SELECT customer_id, channel FROM (SELECT customer_id, channel, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY touchpoint_date ASC) AS rn FROM touchpoints) ranked WHERE rn = 1;

What interviewers look for: Understanding first-touch vs last-touch attribution and being able to express both by simply flipping ASC to DESC.

Q16: Compare campaign performance against channel averages

SELECT campaign_name, channel_name, roi, AVG(roi) OVER (PARTITION BY channel_name) AS channel_avg_roi, roi - AVG(roi) OVER (PARTITION BY channel_name) AS roi_vs_avg FROM campaigns;

Q17: Find customers who converted within 7 days of their first ad click

SELECT a.customer_id, a.click_date, c.conversion_date FROM ad_clicks a INNER JOIN conversions c ON a.customer_id = c.customer_id WHERE c.conversion_date BETWEEN a.click_date AND a.click_date + INTERVAL '7 days' AND a.click_date = (SELECT MIN(click_date) FROM ad_clicks WHERE customer_id = a.customer_id);

Q18: Pivot monthly revenue by channel

SELECT DATE_TRUNC('month', order_date) AS month, SUM(CASE WHEN channel = 'Paid Search' THEN revenue ELSE 0 END) AS paid_search, SUM(CASE WHEN channel = 'Organic' THEN revenue ELSE 0 END) AS organic, SUM(CASE WHEN channel = 'Email' THEN revenue ELSE 0 END) AS email, SUM(CASE WHEN channel = 'Social' THEN revenue ELSE 0 END) AS social FROM orders GROUP BY DATE_TRUNC('month', order_date) ORDER BY month;

What interviewers look for: CASE-based pivoting is the universal approach that works across all SQL dialects. Mentioning PIVOT as a dialect-specific alternative earns bonus points.

Q19: Calculate days between first and second purchase

WITH ranked_orders AS (SELECT customer_id, order_date, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date) AS order_num FROM orders) SELECT a.customer_id, b.order_date - a.order_date AS days_to_second_purchase FROM ranked_orders a INNER JOIN ranked_orders b ON a.customer_id = b.customer_id AND a.order_num = 1 AND b.order_num = 2;

Q20: Identify churned customers (no purchase in 90 days)

SELECT customer_id, MAX(order_date) AS last_order, CURRENT_DATE - MAX(order_date) AS days_since_last_order FROM orders GROUP BY customer_id HAVING CURRENT_DATE - MAX(order_date) > 90;

Why this matters: Churn identification drives reactivation campaigns. Interviewers love seeing you connect the SQL to the business action.

Advanced SQL Questions (21–30)

These appear in final rounds at data-mature companies. They test optimization thinking, complex CTEs, and your ability to model real marketing systems in SQL.

Q21: Build a multi-touch attribution model

Interviewer framing: "Give each touchpoint in a customer's journey equal credit for the conversion."

WITH journey AS (SELECT t.customer_id, t.channel, t.touchpoint_date, c.conversion_value, COUNT(*) OVER (PARTITION BY t.customer_id) AS total_touches FROM touchpoints t INNER JOIN conversions c ON t.customer_id = c.customer_id WHERE t.touchpoint_date <= c.conversion_date) SELECT channel, SUM(conversion_value / total_touches) AS attributed_revenue, COUNT(DISTINCT customer_id) AS customers_touched FROM journey GROUP BY channel ORDER BY attributed_revenue DESC;

Standout answer: Acknowledging this is a linear model, then describing how you would modify it for time-decay (weighting recent touches more heavily) or position-based (40/20/40) attribution.

Q22: Funnel drop-off analysis

WITH funnel AS (SELECT COUNT(DISTINCT CASE WHEN event = 'page_view' THEN user_id END) AS step_1_views, COUNT(DISTINCT CASE WHEN event = 'add_to_cart' THEN user_id END) AS step_2_cart, COUNT(DISTINCT CASE WHEN event = 'checkout_start' THEN user_id END) AS step_3_checkout, COUNT(DISTINCT CASE WHEN event = 'purchase' THEN user_id END) AS step_4_purchase FROM events WHERE event_date >= CURRENT_DATE - INTERVAL '30 days') SELECT step_1_views, step_2_cart, step_3_checkout, step_4_purchase, ROUND(step_2_cart * 100.0 / NULLIF(step_1_views, 0), 1) AS view_to_cart_pct, ROUND(step_3_checkout * 100.0 / NULLIF(step_2_cart, 0), 1) AS cart_to_checkout_pct, ROUND(step_4_purchase * 100.0 / NULLIF(step_3_checkout, 0), 1) AS checkout_to_purchase_pct FROM funnel;

What interviewers look for: Whether you handle the funnel as ordered (user must do step 1 before step 2) vs unordered (any sequence). The answer above is unordered. For ordered funnels, you need window functions to enforce sequence.

Q23: Segment customers using RFM scoring

WITH rfm AS (SELECT customer_id, CURRENT_DATE - MAX(order_date) AS recency_days, COUNT(order_id) AS frequency, SUM(order_total) AS monetary FROM orders GROUP BY customer_id), scored AS (SELECT *, NTILE(5) OVER (ORDER BY recency_days ASC) AS r_score, NTILE(5) OVER (ORDER BY frequency DESC) AS f_score, NTILE(5) OVER (ORDER BY monetary DESC) AS m_score FROM rfm) SELECT *, r_score + f_score + m_score AS rfm_total, CASE WHEN r_score + f_score + m_score >= 13 THEN 'Champion' WHEN r_score + f_score + m_score >= 9 THEN 'Loyal' WHEN r_score >= 4 AND f_score <= 2 THEN 'New Customer' WHEN r_score <= 2 AND f_score >= 3 THEN 'At Risk' ELSE 'Needs Attention' END AS segment FROM scored;

This is a senior-level differentiator. RFM segmentation is a classic marketing framework, and writing it in pure SQL shows you understand both the business concept and the technical execution.

Q24: Calculate customer lifetime value (CLV) by cohort

WITH cohort_spend AS (SELECT c.customer_id, DATE_TRUNC('month', c.signup_date) AS cohort_month, DATE_TRUNC('month', o.order_date) AS order_month, SUM(o.order_total) AS monthly_spend FROM customers c INNER JOIN orders o ON c.customer_id = o.customer_id GROUP BY c.customer_id, cohort_month, order_month) SELECT cohort_month, COUNT(DISTINCT customer_id) AS cohort_size, SUM(monthly_spend) / COUNT(DISTINCT customer_id) AS avg_clv FROM cohort_spend GROUP BY cohort_month ORDER BY cohort_month;

Q25: Analyze A/B test results with statistical context

WITH test_results AS (SELECT variant, COUNT(*) AS total_users, SUM(CASE WHEN converted = 1 THEN 1 ELSE 0 END) AS conversions, AVG(CASE WHEN converted = 1 THEN 1.0 ELSE 0.0 END) AS conversion_rate FROM ab_test_events WHERE test_id = 'spring_landing_page' GROUP BY variant) SELECT a.variant AS control_variant, b.variant AS test_variant, a.conversion_rate AS control_rate, b.conversion_rate AS test_rate, b.conversion_rate - a.conversion_rate AS lift, (b.conversion_rate - a.conversion_rate) / NULLIF(a.conversion_rate, 0) * 100 AS lift_pct FROM test_results a CROSS JOIN test_results b WHERE a.variant = 'control' AND b.variant = 'variant_b';

Standout answer: Acknowledging that SQL alone cannot do proper significance testing — you need to either use a stats extension (like PostgreSQL's pg_stat) or export to Python/R. Interviewers respect honesty about tool boundaries.

Q26: Find the highest-value customer journey path

WITH journeys AS (SELECT customer_id, STRING_AGG(channel, ' > ' ORDER BY touchpoint_date) AS journey_path, COUNT(*) AS touchpoints FROM touchpoints GROUP BY customer_id) SELECT j.journey_path, COUNT(*) AS journey_count, AVG(o.total_revenue) AS avg_revenue FROM journeys j INNER JOIN (SELECT customer_id, SUM(order_total) AS total_revenue FROM orders GROUP BY customer_id) o ON j.customer_id = o.customer_id GROUP BY j.journey_path HAVING COUNT(*) >= 10 ORDER BY avg_revenue DESC LIMIT 10;

Q27: Detect campaign cannibalization

WITH overlapping AS (SELECT a.campaign_id AS camp_a, b.campaign_id AS camp_b, COUNT(DISTINCT a.customer_id) AS shared_audience FROM campaign_exposures a INNER JOIN campaign_exposures b ON a.customer_id = b.customer_id AND a.campaign_id < b.campaign_id AND a.exposure_date BETWEEN b.exposure_date - INTERVAL '7 days' AND b.exposure_date + INTERVAL '7 days' GROUP BY a.campaign_id, b.campaign_id) SELECT camp_a, camp_b, shared_audience FROM overlapping ORDER BY shared_audience DESC;

Q28: Recursive query — build a referral chain

WITH RECURSIVE referral_chain AS (SELECT customer_id, referred_by, 1 AS depth FROM customers WHERE referred_by IS NOT NULL UNION ALL SELECT c.customer_id, rc.referred_by, rc.depth + 1 FROM customers c INNER JOIN referral_chain rc ON c.referred_by = rc.customer_id WHERE rc.depth < 5) SELECT referred_by AS original_referrer, MAX(depth) AS chain_depth, COUNT(*) AS total_referrals FROM referral_chain GROUP BY referred_by ORDER BY total_referrals DESC LIMIT 10;

Q29: Optimize a slow marketing report query

Interviewer framing: "This query runs every morning and takes 12 minutes. How would you fix it?"

WITH daily_metrics AS (SELECT campaign_id, DATE_TRUNC('day', event_date) AS day, COUNT(*) FILTER (WHERE event = 'impression') AS impressions, COUNT(*) FILTER (WHERE event = 'click') AS clicks, COUNT(*) FILTER (WHERE event = 'conversion') AS conversions FROM campaign_events WHERE event_date >= CURRENT_DATE - INTERVAL '30 days' GROUP BY campaign_id, DATE_TRUNC('day', event_date)) SELECT d.*, c.campaign_name, c.channel FROM daily_metrics d INNER JOIN campaigns c ON d.campaign_id = c.campaign_id ORDER BY d.day DESC, d.impressions DESC;

What interviewers really want to hear: Index recommendations (CREATE INDEX on event_date, campaign_id, event), materialized views for recurring reports, partitioning by date, and EXPLAIN ANALYZE as your diagnostic tool.

Q30: Build a reusable marketing KPI dashboard query

WITH current_period AS (SELECT channel, SUM(spend) AS spend, SUM(revenue) AS revenue, COUNT(DISTINCT customer_id) AS customers, SUM(revenue) / NULLIF(SUM(spend), 0) AS roas FROM marketing_data WHERE event_date >= DATE_TRUNC('month', CURRENT_DATE) GROUP BY channel), prior_period AS (SELECT channel, SUM(spend) AS spend, SUM(revenue) AS revenue, COUNT(DISTINCT customer_id) AS customers, SUM(revenue) / NULLIF(SUM(spend), 0) AS roas FROM marketing_data WHERE event_date >= DATE_TRUNC('month', CURRENT_DATE) - INTERVAL '1 month' AND event_date < DATE_TRUNC('month', CURRENT_DATE) GROUP BY channel) SELECT c.channel, c.spend AS current_spend, c.revenue AS current_revenue, c.roas AS current_roas, p.roas AS prior_roas, (c.roas - p.roas) / NULLIF(p.roas, 0) * 100 AS roas_change_pct FROM current_period c LEFT JOIN prior_period p ON c.channel = p.channel ORDER BY c.revenue DESC;

What Interviewers Are Really Looking For

After sitting on the other side of the table for hundreds of interviews, here is what actually separates the hire from the pass:

1. Business context, not just correct syntax. Any candidate can write a GROUP BY. The ones we hire say, "I would filter out campaigns with fewer than 1,000 impressions because the CTR would be statistically unreliable."

2. Clarifying questions. When I give a deliberately vague prompt like "tell me which campaigns are performing well," the best candidates ask: "How do you define 'performing well' — ROAS, conversion rate, or volume? And over what time period?" That is how real analysts operate.

3. Optimization awareness. You do not need to be a DBA, but mentioning indexes, EXPLAIN plans, and query cost when dealing with large marketing datasets shows maturity.

4. Clean, readable SQL. Use CTEs instead of nested subqueries. Alias your tables. Indent consistently. We read your query like we would read your future pull requests.

5. Knowing when SQL is not the right tool. Statistical significance testing, complex ML models, visualization — acknowledging that SQL is one tool in a broader stack shows seniority.

How to Practice: Recommended Datasets and Platforms

Reading questions and answers is step one. Actually writing the queries is where the learning happens. Here are the best resources for practicing marketing SQL queries specifically:

LeetCode SQL — Solve the Top 50 SQL problems; focus on window functions and GROUP BY categories.

Mode Analytics SQL Tutorial — Free, browser-based SQL editor with real datasets including marketing analytics data.

DataLemur — SQL interview questions from actual FAANG companies, with several marketing-adjacent problems.

HackerRank SQL — Timed challenges that simulate the pressure of a real marketing analyst SQL test.

For datasets, use the Google Merchandise Store dataset (via BigQuery public datasets) for real e-commerce and marketing data, Kaggle marketing datasets for practice data, or your own company's data if you have access. Aim for 2–3 problems per day for 3 weeks before your interview. Focus on window functions (RANK, ROW_NUMBER, LAG, LEAD), CTEs, and date manipulation — these are the areas where most marketing analyst candidates are weakest.

Key Takeaways

• SQL interview questions for marketing analyst roles prioritize business context over syntax perfection. Interviewers want to see you connect queries to marketing outcomes like ROAS, retention, and attribution.

• The 30 questions in this guide cover the full spectrum from basic SELECT/WHERE to advanced multi-touch attribution and RFM segmentation — exactly what companies test in 2026.

• Window functions are the single most important topic to master. They appear in at least 40% of intermediate and advanced marketing SQL questions.

• Always ask clarifying questions during the interview. Ambiguity in the prompt is intentional and your response to it is being evaluated.

• Practice with marketing-specific data (campaign tables, customer events, attribution logs) rather than generic SQL exercises. Context matters.

• Readable SQL with clear CTEs, meaningful aliases, and consistent formatting makes a stronger impression than clever one-liners.

Frequently Asked Questions

What SQL skills do marketing analysts need most?

Marketing analysts need strong fundamentals in SELECT, JOIN, GROUP BY, and WHERE clauses, plus intermediate skills in window functions (RANK, ROW_NUMBER, LAG), CTEs, CASE statements, and date functions. The ability to write cohort analysis queries, attribution models, and funnel analysis in SQL covers 90% of what marketing teams need day-to-day.

How hard are SQL interviews for marketing analyst roles?

Difficulty varies by company maturity. At early-stage startups, expect beginner to intermediate questions focused on data pulling and basic aggregations. At large tech companies and data-mature organizations, expect advanced window functions, optimization questions, and open-ended modeling problems. Most marketing analyst SQL tests fall in the intermediate range.

Should I learn PostgreSQL or MySQL for marketing analytics?

PostgreSQL is the stronger choice for marketing analytics interviews. It has better support for window functions, CTEs, and date manipulation — all of which are heavily tested. Many companies also use cloud warehouses like BigQuery, Snowflake, or Redshift, which share PostgreSQL-like syntax. Learning PostgreSQL gives you the widest coverage.

How long should I prepare for a marketing analyst SQL interview?

Most candidates need 3 to 4 weeks of focused practice, doing 2 to 3 problems per day. If you already use SQL at work, focus your prep on window functions, CTEs, and marketing-specific scenarios like cohort analysis and attribution. If you are newer to SQL, add 2 extra weeks for fundamentals.

Do marketing analysts use SQL every day?

At most data-driven companies, yes. Marketing analysts use SQL daily to pull campaign performance data, build customer segments, create reporting dashboards, analyze A/B test results, and answer ad-hoc questions from stakeholders. According to industry surveys, SQL is the most-used technical tool among marketing analysts, ahead of Excel and Python.

What is the difference between a marketing analyst SQL test and a data analyst SQL test?

Marketing analyst SQL tests use marketing-specific contexts: campaign tables, attribution data, customer lifecycle events, channel performance, and funnel metrics. Data analyst SQL tests may use any domain. The SQL itself is similar, but marketing interviews heavily weight your ability to interpret results in terms of ROAS, CAC, LTV, retention, and other marketing KPIs.

Can I use AI tools during a SQL interview?

Most companies still prohibit AI assistance during live technical interviews. However, take-home SQL assessments are harder to police, and some companies are moving toward open-resource formats. Regardless of policy, you need to understand the SQL deeply enough to explain your logic verbally — interviewers will ask follow-up questions that AI cannot answer for you.

What are the most common mistakes in marketing analyst SQL interviews?

The top five mistakes are: (1) not handling NULL values and division by zero, (2) using correlated subqueries when a window function would be cleaner, (3) forgetting to ask clarifying questions about the business context, (4) writing unreadable SQL without aliases or formatting, and (5) not filtering for statistical significance when working with small sample sizes in campaign data.

For more career guidance, explore our resources on SQL for marketing analysts, the marketing analyst career path, common interview questions, essential marketing skills, or browse open marketing analyst positions.

Ready to Find Your Next Marketing Analytics Role?

Jobsolv uses AI to match you with the best marketing analytics jobs and tailor your resume for each application.

Get weekly job alerts

Curated marketing analytics roles — delivered every Monday.

Atticus Li

Hiring manager for marketing analysts and career coach. Champions underdogs and high-ambition individuals building careers in marketing analytics and experimentation.

Related Articles