Loganix Ops

Listing Audit — QA Review Form

Schema Mapping

How each form field maps to the loganix_ops.supplier_site_audit table. This table stores observable facts gathered by agentic spiders or manual staff review — it is the verification layer on top of supplier-provided data.

Link & Content
link_type_observedLink type
sponsored_observedSponsored?
word_count_observedAvg word count
outbound_links_observedOutbound links
internal_links_observedInternal links?
embeds_observedEmbeds found?
images_observedImages found?
Verification
indexed_observedGoogle indexed?
language_observedLanguage
live_link_verifiedExample link OK?
Site Health
site_accessibleSite up?
ads_observedHas ads?
post_frequency_observedPosting frequency
Editorial Signals
author_byline_observedAuthor pattern
site_scope_observedGeo scope
local_target_observedLocal target name
content_type_observedDominant content type
anchor_types_observedObserved anchors
site_category_observedStaff category
gray_niches_observedGray niches seen
Audit Trail
audited_bySpider or staff
last_audited_atAuto: timestamp

MCP Integration

This table is designed to be written by agentic spiders via MCP. Every column has a COMMENT ON in pg_catalog describing its purpose, valid values, and what supplier_sites field it verifies. An LLM reading the schema can populate this table without human guidance.

Comparison Layer

Each audit field has a corresponding supplier_sites or meta field. When the two disagree, a mismatch flag is raised for publisher advocate review. See /listing for the supplier side.

QA Review Form — Not Connected to Database

This form shows every field in the supplier_site_audit table — what our spiders and staff can observe about a site. Use it to verify we're capturing the right data points. Compare with /listing to see the supplier side. Nothing is saved — this is for review by Angelo, John, Lore, and Sara.

Listing Audit

Observable facts about a supplier's site — gathered by automated spidering or manual staff review. One audit record per site listing.

1

Link & Content Attributes

supplier_site_audit
Actual link type found on published posts. Checked by inspecting rel attributes on outbound links.
supplier_site_audit.link_type_observed — varchar(10)
Are published posts tagged as sponsored, paid, advertorial, or similar? Checked by scanning for rel="sponsored", disclosure labels, and advertorial tags.
supplier_site_audit.sponsored_observed — boolean
Sponsored markers found on posts
Average word count across recently published articles on the site. Calculated by sampling the most recent 5-10 posts.
supplier_site_audit.word_count_observed — int
words (average)
Average number of outbound links per post (links pointing to external domains). High counts may indicate a link farm or low editorial standards.
supplier_site_audit.outbound_links_observed — int
links per post (average)
Does the publisher add their own internal links to posts? Detected by finding links pointing to the same domain within article content.
supplier_site_audit.internal_links_observed — boolean
Internal links found in posts
Do published posts contain embedded media? YouTube videos, Google Maps, iframes, or other rich embeds.
supplier_site_audit.embeds_observed — boolean
Embedded media found in posts
Do published posts contain images? Photos, infographics, screenshots, diagrams within article content.
supplier_site_audit.images_observed — boolean
Images found in posts
2

Verification

supplier_site_audit
Are published posts on this site actually appearing in Google search results? Verified via site: search operator.
supplier_site_audit.indexed_observed — boolean
Posts found in Google index
Primary language of the site's content as detected by scraping recent posts. Critical — non-English sites require supplier-provided content.
supplier_site_audit.language_observed — varchar(50)
Is the example link the supplier provided still live and returning HTTP 200? Dead example links suggest the site may remove posts.
supplier_site_audit.live_link_verified — boolean
Example link returns 200 OK
3

Site Health

supplier_site_audit
Is the site homepage responding with HTTP 200? DNS failures, timeouts, and error pages all count as inaccessible. Dead sites should be deactivated.
supplier_site_audit.site_accessible — boolean
Site is responding
Does the site have display ads? AdSense, banner ads, pop-ups, interstitials. Heavy ad presence may indicate lower editorial quality and worse user experience.
supplier_site_audit.ads_observed — boolean
Display ads found on site
How often are new articles published? Estimated by checking dates on recent posts. Dead blogs (no posts in 6+ months) are a cancellation risk.
supplier_site_audit.post_frequency_observed — varchar(50)
4

Editorial Signals

supplier_site_audit

Human-reviewable signals that help clients filter inventory. These were added based on John’s audit spec (author presence, local targeting, content type, anchor patterns, category correction, and gray-niche disclosure).

Does a real author name appear on published posts, or is the byline generic? Not deep identity verification — just “is a human name visible vs. ‘admin’ or the site name.”
supplier_site_audit.author_byline_observed — varchar(30)
Is the site’s audience local or broad? Enables inventory filtering for clients who need locally-scoped sites (common on news-site requests). Separate from “accepts local content” — this is what the site actually targets.
supplier_site_audit.site_scope_observed — varchar(20)
When scope is state / city / neighborhood, name the target — e.g. Austin, TX, California, Brooklyn. Leave blank for global / national sites.
supplier_site_audit.local_target_observed — varchar(100)
What format does the site primarily publish? Mirrors supplier_sites.article_style so observed vs. claimed content types can be compared.
supplier_site_audit.content_type_observed — varchar(30)
What anchor text types actually appear in the site’s outbound links? Check all that apply. Compared against supplier_sites.accepted_anchor_types — a mismatch flags that the supplier isn’t enforcing their stated policy.
supplier_site_audit.anchor_types_observed — text[]
Human-verified primary category for this site. Edit this during the audit to correct incorrect AI-generated tags (site_ai_categories). This value takes precedence over AI categorization in staff-facing UIs.
supplier_site_audit.site_category_observed — varchar(100)
Has the site published content in any sensitive / gray niches? Sourced from the niche values in supplier_site_pricing. Compared against supplier_sites.sensitive_topics to flag undisclosed gray-niche activity.
supplier_site_audit.gray_niches_observed — text[]
Dropdown is dynamic — sourced from niches in supplier_site_pricing.niche plus custom additions.
5

Audit Trail

supplier_site_audit
Who or what performed this audit. "spider" = automated agentic crawl. "staff:name" = manual review by a specific team member.
supplier_site_audit.audited_by — varchar(100)
When this audit was last performed. Stale audits (>30 days) should be refreshed. Auto-set to now() on insert.
supplier_site_audit.last_audited_at — timestamptz
Auto-populated on audit completion