SE Ranking
Category: SEO & Research
Integration type: Tenant-configured API key (stored in integrations table)
External API: SE Ranking API v3
Purpose
SE Ranking is an affordable all-in-one SEO tool used for backlink intelligence and keyword rank tracking. Compared to Ahrefs (expensive, enterprise-focused) and SEMrush (tenant-specific), SE Ranking is positioned as a cost-effective option for tenants who want backlink data without a full Ahrefs subscription.
Key uses:
- Backlink Researcher — backlink metrics and summary data for prospect qualification
- Site Auditor — trust flow and citation flow as additional authority signals
- Keyword Researcher — keyword rank tracking per domain (complements SEMrush keyword volume)
Tenants provide their own SE Ranking API key.
Config Structure
Tenant integration
interface SERankingConfig {
apiKey: string; // SE Ranking API key — uses "Token <key>" bearer auth
}integrations row:
provider: 'se_ranking'
api_key: encrypt(apiKey)
metadata: {}Integration Pattern
Tool layer (packages/tools/src/se-ranking.ts)
SE Ranking API uses bearer token auth with the Token <key> format (not the standard Bearer):
class SERankingTool {
private baseUrl = 'https://api4.seranking.com';
constructor(private apiKey: string) {}
private headers() {
return {
Authorization: `Token ${this.apiKey}`,
Accept: 'application/json',
};
}
// ── Backlink Summary ─────────────────────────────────────────────────────────
async getBacklinksSummary(domain: string): Promise<BacklinksSummaryResult> {
const response = await axios.get(
`${this.baseUrl}/research/backlinks/summary/`,
{
headers: this.headers(),
params: {
domain,
domain_type: 'domain', // 'domain' | 'page' | 'subdomain'
},
},
);
return {
domain,
totalBacklinks: response.data.total_backlinks,
referringDomains: response.data.referring_domains,
referringIPs: response.data.referring_ips,
trustFlow: response.data.trust_flow,
citationFlow: response.data.citation_flow,
domainScore: response.data.domain_trust_score,
noFollowLinks: response.data.nofollow_backlinks,
doFollowLinks: response.data.dofollow_backlinks,
};
}
// ── Backlinks List ───────────────────────────────────────────────────────────
async getBacklinks(options: {
domain: string;
limit?: number;
offset?: number;
sortBy?: 'trust_flow' | 'citation_flow' | 'first_seen';
doFollowOnly?: boolean;
}): Promise<BacklinkRow[]> {
const response = await axios.get(
`${this.baseUrl}/research/backlinks/`,
{
headers: this.headers(),
params: {
domain: options.domain,
domain_type: 'domain',
limit: options.limit ?? 50,
offset: options.offset ?? 0,
sort_by: options.sortBy ?? 'trust_flow',
filter_dofollow: options.doFollowOnly ? 1 : 0,
},
},
);
return (response.data.backlinks ?? []).map((b: any) => ({
sourceUrl: b.source_url,
targetUrl: b.target_url,
anchorText: b.anchor_text,
trustFlow: b.trust_flow,
citationFlow: b.citation_flow,
isNoFollow: b.nofollow,
firstSeen: b.first_seen,
lastSeen: b.last_seen,
}));
}
// ── Backlink Metrics (batch) ─────────────────────────────────────────────────
async getBacklinksMetrics(domains: string[]): Promise<BacklinksMetricsRow[]> {
// SE Ranking supports up to 100 domains per call
const response = await axios.post(
`${this.baseUrl}/research/backlinks/metrics/`,
{ domains },
{ headers: { ...this.headers(), 'Content-Type': 'application/json' } },
);
return response.data.map((row: any) => ({
domain: row.domain,
trustFlow: row.trust_flow,
citationFlow: row.citation_flow,
referringDomains: row.referring_domains,
totalBacklinks: row.total_backlinks,
}));
}
// ── Keyword Rankings ─────────────────────────────────────────────────────────
async getKeywordRankings(options: {
domain: string;
keywords: string[];
searchEngine: 'google' | 'bing' | 'yahoo';
location?: string; // e.g. "United States"
}): Promise<KeywordRankingRow[]> {
const response = await axios.post(
`${this.baseUrl}/keywords/check/`,
{
domain: options.domain,
keywords: options.keywords,
search_engine: options.searchEngine,
location_name: options.location ?? 'United States',
},
{ headers: { ...this.headers(), 'Content-Type': 'application/json' } },
);
return response.data.map((row: any) => ({
keyword: row.keyword,
position: row.position, // null if not in top 100
url: row.url,
volume: row.volume,
}));
}
async verify(): Promise<void> {
// Fetch account/subscription info
const response = await axios.get(`${this.baseUrl}/system/account/`, {
headers: this.headers(),
});
if (!response.data.email) {
throw new Error('SE Ranking verification failed — invalid API key');
}
}
}Trust Flow vs Citation Flow
SE Ranking exposes Trust Flow and Citation Flow — metrics originally developed by Majestic SEO and now licensed by SE Ranking:
| Metric | Range | What it means |
|---|---|---|
| Trust Flow | 0–100 | Quality of links pointing to the domain — links from trusted sites push this up |
| Citation Flow | 0–100 | Volume of links — raw link count influence |
| Trust/Citation ratio | > 0.5 = good | High CF + low TF = spammy link profile |
These complement Moz DA and Ahrefs DR — using multiple authority signals gives a more complete picture when scoring link building prospects.
SE Ranking vs Ahrefs — When to Use Which
| Task | SE Ranking | Ahrefs |
|---|---|---|
| Trust Flow / Citation Flow | ✓ | ✗ |
| Domain Rating (DR) | ✗ | ✓ |
| URL Rating (UR) | ✗ | ✓ |
| Backlinks list | ✓ (affordable) | ✓ (more complete) |
| Keyword rank checking | ✓ | ✓ |
| API cost | Low | High |
Tenants with SE Ranking subscriptions use it for bulk backlink qualification. Tenants with Ahrefs use Ahrefs for deeper link analysis.
Test Cases
Unit tests (packages/tools/src/se-ranking.test.ts)
| Test | Approach |
|---|---|
getBacklinksSummary() sends Token <key> auth header | Mock axios.get; assert Authorization: Token ... |
getBacklinksSummary() maps all response fields | Mock response; assert trustFlow, citationFlow, doFollowLinks |
getBacklinks() applies doFollowOnly filter | Assert filter_dofollow: 1 in params |
getBacklinksMetrics() POSTs domains array | Assert request body { domains: [...] } |
getKeywordRankings() returns null position for unranked keywords | Mock { position: null }; assert null preserved |
verify() throws on invalid API key | Mock {} response; assert throws |
Related
- Ahrefs Provider — domain authority + URL rating
- Moz Provider — domain authority (DA) scores
- Backlink Researcher Agent — prospect qualification
- Tool Integration Layer