You know your user's name. You know their company and their role. You stored that when they signed up. Congratulations — you have 2021-era personalization.
The agent that wins in 2026 does not just recall what the user told you. It knows what is happening in their world right now. Did their company just raise a Series B? Did they ship a major product update last week? Are they hiring machine learning engineers — a signal that AI investment is accelerating? That context changes how a good agent should respond, and none of it lives in your database.
This post covers how to build AI agents that enrich user context with live web intelligence, and what that unlocks for sales, recruiting, and investment use cases.
The Static Profile Problem
Traditional CRM-style user profiles are snapshots. You captured the data at signup, maybe refreshed it once at renewal. The company has six employees in your record. They now have sixty. The "current product" field says one thing; their website says something quite different.
Static profiles do not just go stale — they actively mislead. An AI agent working from outdated context makes confident personalization mistakes, which feel worse to users than generic responses. "I see you work at an early-stage startup" lands badly when the company just IPO'd.
What Dynamic Profiles Add
A dynamic profile combines your stored user data with live web intelligence about their professional context. The core idea: before your agent responds to a user, it pulls recent information from their company's digital footprint and injects it into context.
What web intelligence adds, concretely:
Company news. Did they announce a partnership, acquisition, or funding round? That changes what problems they are probably solving right now.
Product launches. What shipped in the last 30 days? A company that just launched a mobile app has different immediate needs than one that just launched an enterprise tier.
Hiring signals. Job boards are leading indicators. A company posting fifteen ML engineer roles is making a large AI bet. A company that just listed "Head of Cost Optimization" is in a very different mode.
Competitive moves. G2 and Capterra reviews reveal which tools a company is using. LinkedIn and press releases reveal which vendors they partner with. That is competitive intelligence you can use to tailor positioning.
Architecture
The architecture has two data sources flowing into your agent's context builder:
- User profile in your database — name, company, role, account history, past interactions
- Live web knowledge — extracted from the company's public digital footprint on a recurring schedule
Before each agent response, a context enrichment step searches both sources and assembles a rich system prompt.
What to Extract Per User
When a new user signs up, trigger an async enrichment job that extracts these sources for their company:
import KnowledgeSDK from '@knowledgesdk/node';
const ks = new KnowledgeSDK({ apiKey: process.env.KNOWLEDGE_API_KEY });
async function enrichUserProfile(userId: string, companyUrl: string) {
// Extract key pages from their company's digital footprint
const pagesToExtract = [
companyUrl, // Main website
`${companyUrl}/blog`, // Recent news and updates
`${companyUrl}/about`, // Team, mission, stage
`${companyUrl}/careers`, // Hiring signals
`${companyUrl}/newsroom`, // Press releases
`${companyUrl}/changelog`, // Product updates
];
// Extract all pages — each is auto-indexed in your collection
await Promise.all(
pagesToExtract.map(url =>
ks.extract({ url }).catch(() => null) // Some pages won't exist — that's fine
)
);
// Mark enrichment complete with timestamp
await db('users').where({ id: userId }).update({
profile_enriched_at: new Date(),
company_url: companyUrl,
});
}
Note the catch(() => null) pattern — not every company has a /newsroom or /changelog. Fail gracefully and extract what exists.
Using Web Intelligence in Agent Context
Before your agent responds to a user message, query the extracted knowledge for that user's company:
async function buildAgentContext(userId: string, userMessage: string) {
const user = await db('users').where({ id: userId }).first();
// Search extracted company knowledge for relevant context
const webIntelResponse = await fetch('https://api.knowledgesdk.com/v1/search', {
method: 'POST',
headers: {
'x-api-key': process.env.KNOWLEDGE_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
query: userMessage,
limit: 5,
}),
});
const { results } = await webIntelResponse.json();
const relevantContext = results
.filter(r => r.source_url?.includes(user.company_url))
.map(r => r.content)
.join('\n\n');
return `
You are assisting ${user.name}, ${user.role} at ${user.company_name}.
Recent intelligence about their company:
${relevantContext || 'No recent web intelligence available.'}
Respond in a way that acknowledges their current business context.
`.trim();
}
This approach grounds every agent response in fresh knowledge about the user's actual situation, not just their signup data.
Use Case 1: Sales AI
A sales assistant that knows the prospect's world before the first call. When a salesperson opens a prospect record, the agent has already read:
- Their latest blog post (what problem are they writing about?)
- Their job listings (what capabilities are they building internally?)
- Their recent press coverage (what are they announcing to the market?)
The agent can surface talking points: "They just announced a partnership with Snowflake — this suggests their data infrastructure is scaling. Lead with the data connector story." That is not generic AI — that is intelligence your competitors are not delivering.
Use Case 2: Recruiting AI
A recruiting assistant that understands candidate context. When a recruiter pulls up a candidate, the agent has extracted the candidate's current employer's website and recent news. It surfaces relevant signals: "Their current company just announced layoffs — this candidate may be more receptive to outreach than usual." Or the inverse: "Their company just raised $80M — their equity package is likely underwater and they are locked in."
Use Case 3: Investor AI
An investment analyst agent that tracks portfolio companies in real time. Instead of waiting for quarterly check-ins, the agent monitors each portfolio company's blog, product changelog, and job board. Weekly digest: which companies launched something, which ones started a major hiring push, which ones went quiet.
Privacy and Consent
An important boundary: only extract public web data. Do not attempt to access pages behind login, scrape data from gated professional networks in violation of their terms, or extract any content the company has not made publicly available.
Be transparent with your users about this enrichment. A simple disclosure in your onboarding — "We may pull publicly available information about your company to personalize your experience" — is both good practice and increasingly required by privacy regulations.
Keeping Profiles Fresh
A profile enriched at signup grows stale within weeks for fast-moving companies. Implement a scheduled refresh:
// Re-enrich active users weekly (high-activity users)
// Re-enrich inactive users monthly
async function scheduleProfileRefresh() {
const activeUsers = await db('users')
.where('last_active_at', '>', new Date(Date.now() - 7 * 24 * 60 * 60 * 1000))
.where('profile_enriched_at', '<', new Date(Date.now() - 7 * 24 * 60 * 60 * 1000))
.select('id', 'company_url');
for (const user of activeUsers) {
await enrichUserProfile(user.id, user.company_url);
}
}
The payoff for getting this right is substantial. An agent that knows a user's company raised a round last week, shipped a new product feature on Monday, and is hiring aggressively in a specific department — that agent responds like someone who has done their homework. Static profiles make your AI feel generic. Dynamic profiles make it feel indispensable.