# PhilGEPS Bid Notice Scraper (`keyless_gardener/philgeps-bid-scraper`) Actor

Scrapes Philippine government procurement opportunities from PhilGEPS. Get bid notices, agency, budget, deadline, and status.

- **URL**: https://apify.com/keyless\_gardener/philgeps-bid-scraper.md
- **Developed by:** [Gaming Raccoon](https://apify.com/keyless_gardener) (community)
- **Categories:** Automation, Jobs, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## PhilGEPS Bid Notice Scraper

**Scrape government bid opportunities from PhilGEPS automatically — no login, no coding, just data.**

Perfect for contractors, suppliers, and researchers who need to track Philippine government procurement.

---

### 🎯 What This Does

PhilGEPS posts hundreds of new bid opportunities every day. This tool grabs them for you and delivers clean, structured data you can filter, export, or feed into your CRM.

**No API key. No account on PhilGEPS. Just run and get results.**

---

### 📥 What You Get Per Notice

| Field | Example |
|-------|---------|
| **Reference #** | `49858` |
| **Title** | `Supply and Delivery of Printer Ribbon` |
| **Agency** | `DR E B ESPINOSA SR MEMORIAL STATE COL OF AGRIC AND TECH` |
| **Budget** | `₱1,191,800.00` |
| **Procurement Mode** | `Small Value Procurement` |
| **Status** | `Published` |
| **Deadline** | `27-Jul-2026 09:00 AM` |
| **Category** | `Goods` |
| **Region** | `Region V - Bicol Region` (auto-detected) |
| **Source URL** | `https://philgeps.gov.ph/Indexes/viewLiveTenderDetails/49858` |

---

### 🚀 Quick Start

1. **Click "Run"** — defaults work for most users
2. **Wait ~30 seconds** — gets your first 10 notices
3. **Download** — CSV, JSON, Excel, or push to Google Sheets / webhook

Want more? Just increase **Max Results** up to 500.

---

### ⚙️ Filters (Optional)

| Setting | What It Does |
|---------|--------------|
| **Keywords** | Type "laptop", "construction", "consulting" to filter titles |
| **Category** | Pick *Goods*, *Infrastructure*, or *Consulting Services* |
| **Max Results** | Default 10 — raise to 500 for bulk exports |
| **Crawl Depth** | How many pagination pages to follow (1 = first page only) |

---

### 💡 Common Use Cases

| User | How They Use It |
|------|-----------------|
| **Government contractors** | Daily run → Slack/email alert for new bids matching their niche |
| **Business dev teams** | Weekly export → CRM → track agencies they want to pitch |
| **Market researchers** | Monthly bulk export → analyze spending by region/category/agency |
| **Suppliers** | Filter by product keywords → find agencies buying what you sell |

---

### 💰 Pricing

**$0.05 per run** — a 10-result run costs 5¢ and finishes in ~30 seconds.

| Results | Time | Cost |
|---------|------|------|
| 10 (default) | ~30 sec | $0.05 |
| 100 | ~2 min | $0.05 |
| 500 (max) | ~5 min | $0.05 |

*Compared to Philippine bid monitoring services charging ₱5,000–20,000/month.*

---

### 📊 Output Formats

- **CSV** — open in Excel
- **JSON** — feed to your app
- **Excel** — ready for pivot tables
- **Push to webhook** — automate your pipeline
- **Google Sheets / Airtable** — via Apify integrations

---

### ❓ FAQ

**Does it need my PhilGEPS login?**
No. All data is from the public Bulletin Board — completely open.

**How fresh is the data?**
Scraped live when you run it. New notices appear on PhilGEPS daily.

**Can I schedule it?**
Yes — use Apify's scheduler to run daily/weekly and auto-send results to email, Slack, or your CRM.

**What if a notice is missing a field?**
Some agencies don't fill every field. The tool captures whatever's available.

**Is this legal?**
Yes — scraping public government procurement data is permitted. We respect robots.txt and use polite crawl delays.

---

### 📞 Support

Issues? Questions? Open a ticket in Apify Console → Issues tab, or email the developer.

---

*Data source: Modernized PhilGEPS (philgeps.gov.ph) — official Philippine government procurement portal.*

# Actor input Schema

## `startUrls` (type: `array`):

URLs to start scraping from. Defaults to PhilGEPS procurement listing.
## `searchKeywords` (type: `string`):

Keywords to filter bid notices (e.g. 'laptop', 'construction', 'consulting'). Leave empty for all notices.
## `category` (type: `string`):

Filter by procurement category
## `maxResults` (type: `integer`):

Maximum number of bid notices to scrape
## `maxDepth` (type: `integer`):

How deep to crawl into pagination
## `proxy` (type: `object`):

Proxy configuration. Apify proxy is recommended for reliable scraping.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://philgeps.gov.ph/Indexes/index"
    }
  ],
  "searchKeywords": "",
  "category": "",
  "maxResults": 10,
  "maxDepth": 1,
  "proxy": {
    "useApifyProxy": true
  }
}
````

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("keyless_gardener/philgeps-bid-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("keyless_gardener/philgeps-bid-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call keyless_gardener/philgeps-bid-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=keyless_gardener/philgeps-bid-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "PhilGEPS Bid Notice Scraper",
        "description": "Scrapes Philippine government procurement opportunities from PhilGEPS. Get bid notices, agency, budget, deadline, and status.",
        "version": "0.1",
        "x-build-id": "Ry6ao6UQDhQmblaDm"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/keyless_gardener~philgeps-bid-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-keyless_gardener-philgeps-bid-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/keyless_gardener~philgeps-bid-scraper/runs": {
            "post": {
                "operationId": "runs-sync-keyless_gardener-philgeps-bid-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/keyless_gardener~philgeps-bid-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-keyless_gardener-philgeps-bid-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "URLs to start scraping from. Defaults to PhilGEPS procurement listing.",
                        "default": [
                            {
                                "url": "https://philgeps.gov.ph/Indexes/index"
                            }
                        ],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "searchKeywords": {
                        "title": "Search Keywords",
                        "type": "string",
                        "description": "Keywords to filter bid notices (e.g. 'laptop', 'construction', 'consulting'). Leave empty for all notices.",
                        "default": ""
                    },
                    "category": {
                        "title": "Procurement Category",
                        "enum": [
                            "",
                            "Goods",
                            "Infrastructure",
                            "Consulting Services"
                        ],
                        "type": "string",
                        "description": "Filter by procurement category",
                        "default": ""
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of bid notices to scrape",
                        "default": 10
                    },
                    "maxDepth": {
                        "title": "Crawl Depth",
                        "maximum": 5,
                        "type": "integer",
                        "description": "How deep to crawl into pagination",
                        "default": 1
                    },
                    "proxy": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy configuration. Apify proxy is recommended for reliable scraping.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
