🕵️ 電商競品價格爬蟲完全指南:每日 2 次監測 SOP × 法律邊界 × 免寫程式做法
電商賣家做價格情報必看:完整拆解競品價格監測 SOP、Google Apps Script 比價爬蟲範本、降價警報應對策略、台灣法律灰色地帶與免寫程式替代方案。
為什麼台灣電商一定要監測競品價格?
2026 年蝦皮 / momo / PChome 的競爭已經逼到「同一支保溫瓶,三個賣家三個價」的局面。沒在看競品價格的賣家,每個月通常會發生兩種狀況:第一,半夜不知道對手悄悄降價 12%,隔天訂單掉一半;第二,跟同業殺到見骨,毛利剩 8%,做白工。
根據台灣電商產業協會 2026 Q1 報告,有做價格情報的賣家相較沒做的,平均毛利率高 6.4 個百分點,月營收平均高 23%。這不是因為他們會殺價,而是因為他們知道「什麼時候不該跟」。
舉個實例:去年 10 月一間賣保健食品的小品牌,發現對手在週末固定降價 15% 衝量。他們的對策不是跟降,而是把週五傍晚改成「滿千送限量贈品」,週末訂單反而比對手多 30%。這就是價格情報帶來的決策優勢。
監測競品的目的有三:
- 防守:對手降價時提早 12 小時知道,不會被偷襲
- 進攻:對手缺貨時拉一波廣告搶單
- 定價:知道市場底線,自己不會殺過頭
但價格爬蟲牽涉技術、法律、運營成本三個面向,沒搞清楚會把好事做成麻煩。
不只抓價格:5 個關鍵欄位才能做出對策
多數新手做價格監測只抓「售價」這一個數字,這樣的監測表沒辦法做決策。一份真正能用的競品監測表,至少要 5 個欄位。
1. 當前售價(含促銷後價格)
這是最基本的。注意要抓「實際結帳時付的錢」,不是劃線價或原價。蝦皮的價格藏在 2. 原價(劃線價) 有原價跟售價兩欄,才能算出對手的「折扣力度」。如果對手平常 8 折,這檔突然 6 折,就是促銷檔期,可能 3 天後就回。 3. 庫存狀態(現貨 / 補貨中 / 售完) 這欄是被忽略的金礦。對手「售完」狀態維持 > 2 天,代表他們補不上貨,這時候你拉廣告搶單最有效。 4. 促銷標籤(限時 / 滿千折百 / 買一送一) 讓你判斷對手是「真降價」還是「玩促銷話術」。例如標「限時 24 小時」但 7 天後價格沒變,就是行銷話術,不用恐慌。 5. 評價數與星等 用來判斷該商品熱賣度。新評價速度(每週新增多少則)比總評價數重要——可以看出對手最近銷量趨勢。 進階版可以加:上架日期、運費、商品圖 URL(看主圖是否改版)、賣場名稱(連動公司資料庫,避免抓到非競品)。 不會寫程式的賣家最容易掉進「以為要付月費請工程師」的陷阱。其實 Google Sheets + Apps Script 就能做出 80% 賣家需要的監測,每月成本 0 元。 完整步驟: 步驟 1:開一個新的 Google Sheet A 欄:競品名稱 / B 欄:URL / C 欄:當前價格 / D 欄:上次價格 / E 欄:最後檢查時間 / F 欄:價格變動 %。 步驟 2:擴充功能 → Apps Script 步驟 3:設定觸發器 Apps Script 編輯器左側「觸發條件」→ 新增觸發條件 → 選擇 步驟 4:申請 LINE Notify Token https://notify-bot.line.me/my/ → 發行權杖 → 選你的個人或群組 → 複製 Token 貼到程式碼第 1 行。 設定完成後完全自動,每天 2 次推 LINE,價格變動超過 5% 才推,不會被吵爆。整套月成本 0 元。 抓到資料只是第一步,知道怎麼用才有價值。針對 3 種常見警報,給你 3 套對策。 降價警報應對 SOP(最常用) 對手降價 5-10%: 對手降價 > 10%: 漲價警報應對 SOP 對手漲價 > 8%: 缺貨警報應對 SOP(最被忽略的機會) 對手「售完」狀態維持 > 48 小時: 通知格式範本(LINE Notify) LINE Notify 的好處是手機推播秒收到,不會像 email 漏看。整個應對流程從「對手降價」到「我們上對策」可以壓在 30 分鐘內。 這是最多賣家忽略的部分。爬蟲做得太放肆,輕則被封 IP、重則被告。先講結論:在台灣爬「公開可見」的競品商品頁價格,目前實務上沒被判賠的判例,但有 5 個雷區一定要避開。 雷區 1:會員價與登入後的價格 蝦皮的「蝦皮會員專屬價」、momo 的「M 會員價」、Costco 線上的會員價——這些屬於「登入後才看得到」的資訊,使用條款明確禁止抓取。爬到等於違反契約,會被封帳號 + 民事求償。 雷區 2:API 端點直接打 蝦皮、momo 都有內部 API(例如 雷區 3:頻率太高被當成攻擊 每分鐘 > 30 次請求很可能被 WAF 偵測為 DDoS。輕則 IP 封 24 小時,重則被列入黑名單。安全做法:每分鐘 < 6 次 + 隨機延遲 3-10 秒。 雷區 4:公開比較表 你自己內部看比價沒問題,但如果做成「我家 vs A 牌 vs B 牌 vs C 牌價格比較」公開貼在 FB / 官網,可能涉及公平交易法第 24 條「不公平競爭」。風險:被同業檢舉、公平會調查。 雷區 5:抓取個資 評論區的「使用者名稱 + 頭像 + 購買紀錄」屬於個資。就算商品頁可以爬,這些欄位也不能存。只能存匿名統計(評論數、星等平均)。 安全做法總結 1.只抓「未登入也看得到」的商品頁 2.加 User-Agent 模擬正常瀏覽器 3.每次請求間隔 3-10 秒隨機延遲 4.每日總請求 < 100 次 5.資料僅供內部決策,不公開 6.不抓 API 端點,只抓 HTML 7.robots.txt 標示 Disallow 的路徑絕對不碰 照這 7 條跑,你的爬蟲不會踩到任何法律紅線。 不是每個老闆都有時間學 Apps Script。如果你連複製貼上程式碼都怕,下面 5 個替代方案任選一個都能上線。 方案 1:Google Sheet 的 IMPORTXML(免費) 直接在儲存格貼公式,每小時自動更新,0 元。缺點:對 JavaScript 渲染的頁面(蝦皮 SPA)成功率較低。適合 PChome、官網、ShopBack 這類靜態頁。 方案 2:EZprice 比價網(免費 + 付費) 台灣本土比價網,有付費 API 可以串。優點:合規、不用自己爬。缺點:商品覆蓋率不到 60%,冷門品抓不到。月費 NT$1,200 起。 方案 3:Prisync(付費) 國際知名價格監測 SaaS,支援 100+ 電商平台。每天自動抓 + Email 通知,介面友善。缺點:對蝦皮、momo 支援度低。月費 USD 99 起(約 NT$3,200)。 方案 4:Price2Spy(付費) 針對 B2B 動態定價的工具,可以做大量級監測(500-10,000 個 SKU)。缺點:英文介面、月費 USD 200 起(約 NT$6,400)。適合中大型品牌。 方案 5:請外包工程師(一次性 NT$8,000-15,000) 如果你怕長期續訂 SaaS,可以在 104 外包網或 PRO360 找工程師寫一次性爬蟲,丟到 Google Sheet 上跑。優點:客製化、永久使用。缺點:對方離職後沒人維護。建議搭配 Apps Script 而非 Python,後續比較好接手。 選擇建議 不論選哪個,核心是「持續做」。做 3 天沒效,做 3 個月你會發現自己的定價直覺完全不同。 後面的 。Google Apps Script 完整範本(免費、夠用、零維護)
const LINE_TOKEN = '你的_LINE_NOTIFY_TOKEN';
const THRESHOLD = 0.05; // 5% 變動才通知
function checkCompetitorPrices() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const data = sheet.getRange('A2:F11').getValues();
const now = new Date();
data.forEach((row, i) => {
const [name, url, lastPrice] = row;
if (!url) return;
try {
Utilities.sleep(3000 + Math.random() * 5000); // 3-8 秒隨機延遲
const html = UrlFetchApp.fetch(url, {
muteHttpExceptions: true,
headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)' }
}).getContentText();
// 蝦皮: "price":89000 (要除以 100000)
// momo: <meta itemprop="price" content="890">
let price = null;
const shopeeMatch = html.match(/"price":(\d+)/);
const momoMatch = html.match(/itemprop="price" content="(\d+)"/);
if (shopeeMatch) price = parseInt(shopeeMatch[1]) / 100000;
else if (momoMatch) price = parseInt(momoMatch[1]);
if (!price) return;
// 寫入當前價格
sheet.getRange(i + 2, 3).setValue(price);
sheet.getRange(i + 2, 5).setValue(now);
// 計算變動
if (lastPrice) {
const change = (price - lastPrice) / lastPrice;
sheet.getRange(i + 2, 6).setValue((change * 100).toFixed(1) + '%');
if (Math.abs(change) > THRESHOLD) {
notifyLine(`[價格警報] ${name}\n${lastPrice} → ${price}(${change > 0 ? '↑' : '↓'}${Math.abs(change * 100).toFixed(1)}%)`);
}
}
// 把這次價格存到 D 欄當下次比較基準
sheet.getRange(i + 2, 4).setValue(price);
} catch(e) { Logger.log(e); }
});
}
function notifyLine(msg) {
UrlFetchApp.fetch('https://notify-api.line.me/api/notify', {
method: 'post',
headers: { Authorization: 'Bearer ' + LINE_TOKEN },
payload: { message: msg }
});
}checkCompetitorPrices → 時間觸發 → 每日 → 早上 9-10 點。再加一個晚上 8-9 點。降價 / 漲價 / 缺貨:3 種警報的應對 SOP
[價格警報] 2026/06/07 09:15
競品:A 牌經典款
舊價:$890 → 新價:$790(↓ 11.2%)
我方價格:$880(價差 +$90)
建議:今天先觀察流量,明天若我方訂單 ↓ 15%,跟降至 $820台灣法律灰色地帶:什麼能爬、什麼不能碰
/api/v4/item/get),效能比抓 HTML 高 10 倍,但 robots.txt 明確禁止。直接打 API 屬於「未經授權存取電腦系統」,可能觸犯刑法 358 條。完全不會寫程式?5 個免寫程式替代方案
=IMPORTXML("https://shopee.tw/product/123/456", "//div[@class='price']")常見問題
Q: 我可以爬蝦皮的銷售數量嗎?這算公開資訊嗎?
Q: 我爬到競品價格後,可以直接用在 Google 廣告投放上嗎?
Q: 對手在週末才降價,我每天 2 次抓會不會錯過?
Q: 抓到的競品價格資料要保存多久?放哪裡比較安全?
Q: 對手降價的時候,跟降跟「滿額免運」哪個對毛利比較好?
延伸閱讀