google-ads-editor

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Google Ads Editor Database Skill

Google Ads Editor 数据库操作技能

Insert campaigns directly into Google Ads Editor's local SQLite database without CSV import.
无需通过CSV导入,直接将广告系列插入到Google Ads Editor的本地SQLite数据库中。

Database Location

数据库位置

~/Library/Application Support/Google/Google-AdWords-Editor/724/ape_4295165693.db
Note: The account ID (
4295165693
) may vary. Find the correct one:
bash
ls ~/Library/Application\ Support/Google/Google-AdWords-Editor/724/ape_*.db
~/Library/Application Support/Google/Google-AdWords-Editor/724/ape_4295165693.db
注意: 账户ID(
4295165693
)可能会有所不同,请按以下方式找到正确的ID:
bash
ls ~/Library/Application\ Support/Google/Google-AdWords-Editor/724/ape_*.db

Key Tables

核心数据表

TablePurposeParent Relationship
CampaignCampaignsNone
AdGroupAd groupsparentId = 2^33 + Campaign.localId
KeywordKeywordsparentId = 2^34 + AdGroup.localId
ResponsiveSearchAdRSA adsparentId = 2^34 + AdGroup.localId
表格用途父级关系
Campaign广告系列
AdGroup广告组parentId = 2^33 + Campaign.localId
Keyword关键词parentId = 2^34 + AdGroup.localId
ResponsiveSearchAdRSA广告parentId = 2^34 + AdGroup.localId

ID Encoding Formula

ID编码公式

python
undefined
python
undefined

Campaign → AdGroup relationship

广告系列 → 广告组 关系

adgroup_parent_id = (2**33) + campaign_local_id # 8589934592 + local_id
adgroup_parent_id = (2**33) + campaign_local_id # 8589934592 + 本地ID

AdGroup → Keyword/RSA relationship

广告组 → 关键词/RSA广告 关系

keyword_parent_id = (2**34) + adgroup_local_id # 17179869184 + local_id
undefined
keyword_parent_id = (2**34) + adgroup_local_id # 17179869184 + 本地ID
undefined

Field Value Reference

字段值参考

Status Values

状态值

  • 0
    = Paused
  • 1
    = Enabled
  • 0
    = 暂停
  • 1
    = 启用

State Values

同步状态值

  • 0
    = Synced from server
  • 1
    = New/pending upload
  • 0
    = 从服务器同步
  • 1
    = 新增/待上传

Keyword Match Types (criterionType)

关键词匹配类型(criterionType)

  • 0
    = Broad match
  • 1
    = Phrase match
  • 2
    = Exact match
  • 0
    = 广泛匹配
  • 1
    = 短语匹配
  • 2
    = 精确匹配

Money Values

金额值

All monetary values in micros (1 dollar = 1,000,000 micros):
python
def dollars_to_micros(dollars: float) -> int:
    return int(dollars * 1_000_000)
所有金额值以微单位计算(1美元 = 1,000,000微单位):
python
def dollars_to_micros(dollars: float) -> int:
    return int(dollars * 1_000_000)

Examples:

示例:

$2.00 = 2000000

$2.00 = 2000000

$0.50 = 500000

$0.50 = 500000

undefined
undefined

Bidding Strategy Types

出价策略类型

  • 1
    = Manual CPC
  • 9
    = Target CPA
  • 12
    = Maximize Conversions
  • 1
    = 手动CPC
  • 9
    = 目标CPA
  • 12
    = 最大化转化

Campaign Types

广告系列类型

  • 0
    = Search
  • 2
    = Display
  • 3
    = Shopping
  • 0
    = 搜索广告
  • 2
    = 展示广告
  • 3
    = 购物广告

URL Blob Encoding

URL Blob编码

finalUrls field uses a custom blob format:
python
import struct

def encode_urls_blob(urls: list[str]) -> bytes:
    """Encode URLs list to Google Ads Editor blob format."""
    if not urls:
        return b'\x00\x00\x00\x00'

    result = struct.pack('<I', len(urls))  # URL count (little-endian uint32)

    for url in urls:
        url_bytes = url.encode('utf-16-le')
        char_count = len(url)
        result += struct.pack('<I', char_count)  # Character count
        result += url_bytes

    return result
finalUrls字段使用自定义blob格式:
python
import struct

def encode_urls_blob(urls: list[str]) -> bytes:
    """将URL列表编码为Google Ads Editor blob格式。"""
    if not urls:
        return b'\x00\x00\x00\x00'

    result = struct.pack('<I', len(urls))  # URL数量(小端uint32)

    for url in urls:
        url_bytes = url.encode('utf-16-le')
        char_count = len(url)
        result += struct.pack('<I', char_count)  # 字符数量
        result += url_bytes

    return result

Quick Insert Examples

快速插入示例

Insert Campaign

插入广告系列

sql
INSERT INTO Campaign (localId, state, name, status, campaignType, biddingStrategyType)
VALUES (
    (SELECT COALESCE(MAX(localId), 0) + 1 FROM Campaign),
    1,  -- state: new
    'My Campaign',
    1,  -- status: enabled
    0,  -- campaignType: search
    1   -- biddingStrategyType: manual CPC
);
sql
INSERT INTO Campaign (localId, state, name, status, campaignType, biddingStrategyType)
VALUES (
    (SELECT COALESCE(MAX(localId), 0) + 1 FROM Campaign),
    1,  -- 状态:新增
    '我的广告系列',
    1,  -- 状态:启用
    0,  -- 广告系列类型:搜索
    1   -- 出价策略类型:手动CPC
);

Insert Ad Group

插入广告组

sql
-- First get the campaign localId
INSERT INTO AdGroup (localId, parentId, state, name, status, maxCpc)
VALUES (
    (SELECT COALESCE(MAX(localId), 0) + 1 FROM AdGroup),
    8589934592 + [CAMPAIGN_LOCAL_ID],  -- parentId encoding
    1,  -- state: new
    'My Ad Group',
    1,  -- status: enabled
    2000000  -- maxCpc: $2.00
);
sql
-- 先获取广告系列localId
INSERT INTO AdGroup (localId, parentId, state, name, status, maxCpc)
VALUES (
    (SELECT COALESCE(MAX(localId), 0) + 1 FROM AdGroup),
    8589934592 + [CAMPAIGN_LOCAL_ID],  -- 父级ID编码
    1,  -- 状态:新增
    '我的广告组',
    1,  -- 状态:启用
    2000000  -- 最高CPC:$2.00
);

Insert Keyword

插入关键词

sql
INSERT INTO Keyword (localId, parentId, state, text, criterionType, status, maxCpc, finalUrls)
VALUES (
    (SELECT COALESCE(MAX(localId), 0) + 1 FROM Keyword),
    17179869184 + [ADGROUP_LOCAL_ID],  -- parentId encoding
    1,  -- state: new
    'my keyword',
    2,  -- criterionType: exact match
    1,  -- status: enabled
    2000000,  -- maxCpc: $2.00
    X'...'  -- encoded URL blob
);
sql
INSERT INTO Keyword (localId, parentId, state, text, criterionType, status, maxCpc, finalUrls)
VALUES (
    (SELECT COALESCE(MAX(localId), 0) + 1 FROM Keyword),
    17179869184 + [ADGROUP_LOCAL_ID],  -- 父级ID编码
    1,  -- 状态:新增
    'my keyword',
    2,  -- 匹配类型:精确
    1,  -- 状态:启用
    2000000,  -- 最高CPC:$2.00
    X'...'  -- 编码后的URL blob
);

Python Helper Script

Python辅助脚本

Full script available at:
/Users/avysotsky/Projects/vood/vibe-business/scripts/google_ads_db_insert.py
完整脚本路径:
/Users/avysotsky/Projects/vood/vibe-business/scripts/google_ads_db_insert.py

Usage

使用方法

bash
undefined
bash
undefined

Close Google Ads Editor first!

先关闭Google Ads Editor!

python3 /Users/avysotsky/Projects/vood/vibe-business/scripts/google_ads_db_insert.py
undefined
python3 /Users/avysotsky/Projects/vood/vibe-business/scripts/google_ads_db_insert.py
undefined

Import and Use Programmatically

程序化导入与使用

python
from scripts.google_ads_db_insert import GoogleAdsDBInserter, dollars_to_micros

with GoogleAdsDBInserter() as db:
    # Create campaign
    campaign_id = db.insert_campaign(
        name="My Campaign",
        status=1,
        campaign_type=0,
        bidding_strategy_type=1,
    )

    # Create ad group
    ag_id = db.insert_ad_group(
        campaign_local_id=campaign_id,
        name="My Ad Group",
        max_cpc=2.00,  # dollars
    )

    # Add keyword
    db.insert_keyword(
        ad_group_local_id=ag_id,
        text="my keyword",
        criterion_type=2,  # exact
        max_cpc=2.00,
        final_url="https://example.com?utm_source=google",
    )

    # Add RSA
    db.insert_responsive_search_ad(
        ad_group_local_id=ag_id,
        headlines=["Headline 1", "Headline 2", ...],  # up to 15
        descriptions=["Description 1", ...],  # up to 4
        final_url="https://example.com",
        path1="path1",
        path2="path2",
    )
python
from scripts.google_ads_db_insert import GoogleAdsDBInserter, dollars_to_micros

with GoogleAdsDBInserter() as db:
    # 创建广告系列
    campaign_id = db.insert_campaign(
        name="我的广告系列",
        status=1,
        campaign_type=0,
        bidding_strategy_type=1,
    )

    # 创建广告组
    ag_id = db.insert_ad_group(
        campaign_local_id=campaign_id,
        name="我的广告组",
        max_cpc=2.00,  -- 美元
    )

    # 添加关键词
    db.insert_keyword(
        ad_group_local_id=ag_id,
        text="my keyword",
        criterion_type=2,  -- 精确匹配
        max_cpc=2.00,
        final_url="https://example.com?utm_source=google",
    )

    # 添加RSA广告
    db.insert_responsive_search_ad(
        ad_group_local_id=ag_id,
        headlines=["标题1", "标题2", ...],  -- 最多15        descriptions=["描述1", ...],  -- 最多4        final_url="https://example.com",
        path1="path1",
        path2="path2",
    )

Important Notes

重要注意事项

  1. Close Google Ads Editor before running database inserts
  2. Backup the database before making changes:
    bash
    cp ~/Library/Application\ Support/Google/Google-AdWords-Editor/724/ape_4295165693.db \
       ~/Library/Application\ Support/Google/Google-AdWords-Editor/724/ape_4295165693.db.backup
  3. After inserting, open Google Ads Editor - new items appear with "pending" state
  4. Click "Post" to upload changes to Google Ads
  1. 插入数据库前请关闭Google Ads Editor
  2. 修改前请备份数据库
    bash
    cp ~/Library/Application\ Support/Google/Google-AdWords-Editor/724/ape_4295165693.db \
       ~/Library/Application\ Support/Google/Google-AdWords-Editor/724/ape_4295165693.db.backup
  3. 插入完成后,打开Google Ads Editor - 新增项目会显示“待处理”状态
  4. 点击“发布”将更改上传至Google Ads

Viewing Database

查看数据库

bash
undefined
bash
undefined

List all campaigns

列出所有广告系列

sqlite3 ~/Library/Application\ Support/Google/Google-AdWords-Editor/724/ape_4295165693.db
"SELECT localId, name, status FROM Campaign"
sqlite3 ~/Library/Application\ Support/Google/Google-AdWords-Editor/724/ape_4295165693.db
"SELECT localId, name, status FROM Campaign"

List all ad groups

列出所有广告组

sqlite3 ~/Library/Application\ Support/Google/Google-AdWords-Editor/724/ape_4295165693.db
"SELECT localId, name, status, maxCpc FROM AdGroup"
sqlite3 ~/Library/Application\ Support/Google/Google-AdWords-Editor/724/ape_4295165693.db
"SELECT localId, name, status, maxCpc FROM AdGroup"

List all keywords

列出所有关键词(前20条)

sqlite3 ~/Library/Application\ Support/Google/Google-AdWords-Editor/724/ape_4295165693.db
"SELECT localId, text, criterionType, maxCpc FROM Keyword LIMIT 20"
undefined
sqlite3 ~/Library/Application\ Support/Google/Google-AdWords-Editor/724/ape_4295165693.db
"SELECT localId, text, criterionType, maxCpc FROM Keyword LIMIT 20"
undefined

Schema Reference

架构参考

Full schema can be viewed with:
bash
sqlite3 ~/Library/Application\ Support/Google/Google-AdWords-Editor/724/ape_4295165693.db ".schema Campaign"
sqlite3 ~/Library/Application\ Support/Google/Google-AdWords-Editor/724/ape_4295165693.db ".schema AdGroup"
sqlite3 ~/Library/Application\ Support/Google/Google-AdWords-Editor/724/ape_4295165693.db ".schema Keyword"
sqlite3 ~/Library/Application\ Support/Google/Google-AdWords-Editor/724/ape_4295165693.db ".schema ResponsiveSearchAd"
可通过以下命令查看完整架构:
bash
sqlite3 ~/Library/Application\ Support/Google/Google-AdWords-Editor/724/ape_4295165693.db ".schema Campaign"
sqlite3 ~/Library/Application\ Support/Google/Google-AdWords-Editor/724/ape_4295165693.db ".schema AdGroup"
sqlite3 ~/Library/Application\ Support/Google/Google-AdWords-Editor/724/ape_4295165693.db ".schema Keyword"
sqlite3 ~/Library/Application\ Support/Google/Google-AdWords-Editor/724/ape_4295165693.db ".schema ResponsiveSearchAd"