You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Google Adsense单次点击收益并搭建页面收益统计系统?

解决方案:追踪AdSense广告点击并统计页面收益

First off, a critical heads-up: Google AdSense doesn’t provide a real-time API for individual click earnings. Google only aggregates this data in your backend reports—you can’t get the exact dollar amount of a single click the moment it happens. That said, we can still build a system that tracks which pages drive ad clicks, then syncs with AdSense’s official API to assign cumulative revenue to each page. If you’re just testing, we can also simulate real-time earnings for demo purposes.

1. Frontend: Track Ad Clicks by Page

We need JavaScript to catch when users click AdSense ads and send the page URL to our backend. AdSense ads are in iframes, so direct click listeners won’t work—but we can use event delegation to target the ad containers:

window.addEventListener('load', () => {
  // Listen for clicks anywhere on the page
  document.addEventListener('click', (e) => {
    // Check if the click originated from an AdSense container
    const adContainer = e.target.closest('.adsbygoogle');
    if (adContainer && adContainer.dataset.adClient) {
      const pageUrl = window.location.href;
      
      // Send click data to backend
      fetch('/track-ad-click', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ page_url: pageUrl })
      }).catch(err => console.error('Failed to track click:', err));
    }
  });
});

This code will log every ad click and tie it to the page where it happened.

2. Backend: Store Clicks & Sync Revenue (Python/Flask Example)

We’ll use a database (MySQL/SQLite works) to store page click counts and cumulative revenue. Let’s start with the database schema:

Database Table Setup

-- Pages table to track click counts per URL
CREATE TABLE pages (
  id INT AUTO_INCREMENT PRIMARY KEY,
  page_url VARCHAR(255) UNIQUE NOT NULL,
  click_count INT DEFAULT 0
);

-- Revenue table to store cumulative earnings per page
CREATE TABLE page_revenue (
  id INT AUTO_INCREMENT PRIMARY KEY,
  page_id INT NOT NULL,
  total_revenue DECIMAL(10,2) DEFAULT 0.00,
  FOREIGN KEY (page_id) REFERENCES pages(id)
);

Backend API Code (Flask)

First install dependencies: pip install flask mysql-connector-python flask-cors

from flask import Flask, request, jsonify
from flask_cors import CORS
import mysql.connector
from mysql.connector import Error

app = Flask(__name__)
CORS(app)  # Allow cross-origin requests from your frontend

# Database config - update with your credentials
DB_CONFIG = {
  'host': 'localhost',
  'database': 'adsense_tracker',
  'user': 'your_db_user',
  'password': 'your_db_pass'
}

def get_db_conn():
  try:
    return mysql.connector.connect(**DB_CONFIG)
  except Error as e:
    print(f"DB connection error: {e}")
    return None

# Track ad clicks and update page counts
@app.route('/track-ad-click', methods=['POST'])
def track_click():
  data = request.get_json()
  page_url = data.get('page_url')
  if not page_url:
    return jsonify({'status': 'error', 'msg': 'Page URL required'}), 400

  conn = get_db_conn()
  if not conn:
    return jsonify({'status': 'error', 'msg': 'DB connection failed'}), 500

  cursor = conn.cursor()
  try:
    # Check if page exists; if not, create it
    cursor.execute("SELECT id, click_count FROM pages WHERE page_url = %s", (page_url,))
    page = cursor.fetchone()
    
    if page:
      page_id, current_clicks = page
      cursor.execute("UPDATE pages SET click_count = %s WHERE id = %s", (current_clicks + 1, page_id))
    else:
      cursor.execute("INSERT INTO pages (page_url, click_count) VALUES (%s, 1)", (page_url,))
      page_id = cursor.lastrowid
      # Initialize revenue entry for new page
      cursor.execute("INSERT INTO page_revenue (page_id, total_revenue) VALUES (%s, 0.00)", (page_id,))
    
    conn.commit()
    return jsonify({'status': 'success', 'msg': 'Click tracked'})
  except Error as e:
    conn.rollback()
    return jsonify({'status': 'error', 'msg': str(e)}), 500
  finally:
    cursor.close()
    conn.close()

# Get cumulative revenue for a specific page
@app.route('/get-page-revenue', methods=['GET'])
def get_revenue():
  page_url = request.args.get('page_url')
  if not page_url:
    return jsonify({'status': 'error', 'msg': 'Page URL required'}), 400

  conn = get_db_conn()
  if not conn:
    return jsonify({'status': 'error', 'msg': 'DB connection failed'}), 500

  cursor = conn.cursor()
  try:
    cursor.execute("""
      SELECT p.page_url, pr.total_revenue, p.click_count
      FROM pages p
      JOIN page_revenue pr ON p.id = pr.page_id
      WHERE p.page_url = %s
    """, (page_url,))
    result = cursor.fetchone()
    
    if result:
      return jsonify({
        'status': 'success',
        'data': {
          'page_url': result[0],
          'total_revenue': float(result[1]),
          'click_count': result[2]
        }
      })
    else:
      return jsonify({'status': 'success', 'data': None, 'msg': 'Page not found'})
  except Error as e:
    return jsonify({'status': 'error', 'msg': str(e)}), 500
  finally:
    cursor.close()
    conn.close()

if __name__ == '__main__':
  app.run(debug=True)

Sync AdSense Revenue to Pages

To get actual earnings, we’ll use the AdSense Management API to pull page-level revenue data and update our database. Here’s how to set this up:

  1. Go to the Google Cloud Console, create a project, enable the AdSense Management API, and generate a service account key.
  2. Use the google-api-python-client library to pull reports:
from google.oauth2 import service_account
from googleapiclient.discovery import build

SCOPES = ['https://www.googleapis.com/auth/adsense.readonly']
SERVICE_ACCOUNT_KEY = 'path/to/your/service-account-key.json'

credentials = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_KEY, scopes=SCOPES)

service = build('adsense', 'v2', credentials=credentials)

# Pull page-level earnings for a date range
report = service.accounts().reports().generate(
    accountId='pub-XXXXXXXXXXXXXXXX',  # Your AdSense publisher ID
    startDate='2024-01-01',
    endDate='2024-01-31',
    metrics='EARNINGS',
    dimensions='PAGE_URL'
).execute()

# Update database with revenue data
for row in report['rows']:
  page_url = row['dimensionValues']['PAGE_URL']
  earnings = float(row['metricValues']['EARNINGS'])
  
  # Connect to DB and update total_revenue for the page
  conn = get_db_conn()
  if conn:
    cursor = conn.cursor()
    cursor.execute("""
      UPDATE page_revenue pr
      JOIN pages p ON pr.page_id = p.id
      SET pr.total_revenue = pr.total_revenue + %s
      WHERE p.page_url = %s
    """, (earnings, page_url))
    conn.commit()
    cursor.close()
    conn.close()

You can run this script on a schedule (like daily with cron) to keep your revenue data up to date.

3. Test Environment: Simulate Real-Time Earnings

If you’re just testing the system, you can hardcode a per-click earnings value and update revenue in real time:

Modify the frontend JS to send a simulated revenue amount:

fetch('/track-ad-click', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ 
    page_url: pageUrl,
    click_revenue: 0.05  // $0.05 per click for testing
  })
})

Then update the backend’s /track-ad-click endpoint to add this to the revenue:

# After updating click count, add simulated revenue
click_revenue = data.get('click_revenue', 0.00)
cursor.execute("UPDATE page_revenue SET total_revenue = total_revenue + %s WHERE page_id = %s", (click_revenue, page_id))

Key Notes to Stay Compliant & Functional

  • AdSense Policies: Don’t interfere with ad clicks or fake data—this will get your account banned. Stick to tracking clicks passively.
  • CORS: If your frontend is on a different domain than the backend, make sure to enable CORS (we used flask-cors in the example).
  • Data Consistency: When syncing AdSense data, track which date ranges you’ve already processed to avoid double-counting revenue.

内容的提问来源于stack exchange,提问作者Sandesh Veerani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 11:32:55