Competitor Tracking
Competitor Tracking
The Competitor Tracking feature lets you maintain a structured list of competitors for each product in the SaaS Factory platform. It is the foundation for the platform's competitive intelligence capabilities — giving the AI research agent a roster of targets to monitor and analyze over time.
Overview
Each product has its own competitors list, scoped by projectId. Records are stored in a dedicated competitors table and managed through a tRPC router with full CRUD support.
Accessing Competitors
Navigate to your product dashboard and select the Competitors tab:
/dashboard/products/[productId]/competitors
The page is server-side rendered, so filters are applied at the database level for fast, reliable results.
Filtering & Search
You can narrow the competitors list using URL query parameters:
| Parameter | Description |
|---|---|
search | Filter competitors by name (partial match supported) |
status | Filter by competitor status (e.g. active, inactive) |
Both parameters are read from the URL on each page load, making filtered views bookmarkable and shareable.
Managing Competitors
Adding a Competitor
Create a new competitor record with the following fields:
| Field | Required | Description |
|---|---|---|
name | ✅ | The competitor's product or company name |
websiteUrl | ✅ | The competitor's primary website URL |
description | ❌ | Optional free-text notes about the competitor |
status | ❌ | Record status (defaults to active) |
Updating a Competitor
Editing any competitor record automatically sets lastAnalyzedAt to the current timestamp. This field acts as an audit marker that indicates when the record was last reviewed or modified.
Deleting a Competitor
Deletion requires the owner role on the project. This restriction prevents accidental removal of competitor records that may be referenced by ongoing research jobs.
Note: There is no delete button in the UI in this release. Deletion is available via the API for
owner-role users.
Data Model
The competitors table schema:
competitors (
id uuid PRIMARY KEY,
projectId uuid NOT NULL REFERENCES projects(id),
name text NOT NULL,
websiteUrl text NOT NULL,
description text,
lastAnalyzedAt timestamptz,
status text NOT NULL DEFAULT 'active',
createdAt timestamptz NOT NULL DEFAULT now(),
updatedAt timestamptz NOT NULL DEFAULT now()
)
API Reference (tRPC)
All procedures are available under the competitor router:
| Procedure | Description | Auth Required |
|---|---|---|
competitor.list | List all competitors for a project, with optional search/status filters | ✅ |
competitor.getById | Fetch a single competitor by ID | ✅ |
competitor.create | Create a new competitor record | ✅ |
competitor.update | Update a competitor; stamps lastAnalyzedAt | ✅ |
competitor.delete | Delete a competitor | owner role only |
Current Limitations
- No analysis data in UI. The platform's AI research agent can analyze competitors, but discovered insights (pricing, features, weaknesses) are not yet displayed in the dashboard. Only name, website URL, and
lastAnalyzedAtare shown. - No structured analysis columns. The
competitorstable does not yet have dedicated columns for analysis output. Richer intelligence storage is planned for a future release. - No delete UI. The delete procedure exists in the API but is not yet exposed as a button in the dashboard.
Roadmap
Upcoming improvements planned for Competitor Tracking:
- Structured analysis columns (pricing, feature matrix, identified weaknesses) added to the database schema.
- Display of AI-generated competitive intelligence in the dashboard UI.
- Delete action exposed in the competitor list UI for
owner-role users. - Automated research agent scheduling against the competitor roster.