
I recently came across a very interesting idea - discovering the next opportunity by analyzing other investments of successful project early holders. Simply put, it’s “following smart money,” and this idea was quite appealing, so I decided to give it a try.
Here’s the story: Recently, the Aster token has been on fire, but crypto big shots analyze that instead of blindly chasing hot spots, it’s better to see what those “smart money” who have already made profits are buying. The specific approach is:
1.Find a project that’s performing well 2.See who the holders are 3.Check what other coins these holders have bought 4.Look for patterns and discover the next opportunity
A blogger took action and manually performed the following operations:
Screen a BSC project with good growth as the analysis target. This blogger chose the recently explosive Aster token.
Get the top 100 holder addresses through BscScan and organize them into an Excel spreadsheet. This step is relatively simple.
This step is quite time-consuming. Manual removal is needed for:
Finally filter out addresses that “look like smart money.”
This is the most exhausting part. Need to open Debank one by one, enter addresses, and see what else each wallet holds besides the target token. Record and count frequencies.
Finally, the blogger manually inputs the organized results into AI for specific investment target analysis.
After going through the entire process, some interesting patterns were indeed discovered. Certain tokens appeared with particularly high frequency in these smart money wallets, and many were projects the blogger hadn’t paid attention to before. They can serve as high-quality targets for smart money.
This idea’s inspiration indeed has value, but the problems are obvious:
This made me wonder: could this process be automated?
I chose the FMZ Platform’s workflow as the automation platform, mainly because:
Designed a process as follows:
Timed Trigger → Get Holders → Filter Addresses → Batch Query Holdings → Data Analysis → AI Generate Report

Set fixed time intervals for automatic running, so you can see the latest analysis results on schedule.

Use Moralis API to get holder information for specified tokens. This step is relatively straightforward, just an HTTP request.
Request method: GET
URL: Moralis holder query interface
Set the query token address as external parameter {{$vars.contractAddress}}, so we can replace the latest hot tokens for query at any time.
In the query parameters section, add three parameters:
- chain set to bsc to specify Binance Smart Chain
- limit set to 100 to get the top 100 holders
- order set to DESC to sort by holding amount in descending order
In the request headers:
- accept set to application/json
- X-API-Key fill in your Moralis API key
This step automates the author’s manual process of copying addresses from BscScan, and the data is more accurate without manual omissions.

This is the key to the entire process. I wrote the previous manual filtering experience into code logic.
First, write an isInstitutionalLabel function to identify institutional addresses, defining keyword arrays containing words like exchange, binance, treasury, foundation, etc. Determine if it’s an institutional address by checking whether the address label contains these keywords.
Then set main filtering conditions: - Holding ratio less than 5% to exclude project whales - Address label is empty or doesn’t match institutional keywords - USD value needs to be greater than $1 million
These rules define filtering standards, but implementing with code ensures consistent standards every time.
// Function to check institutional labels
function isInstitutionalLabel(label) {
const institutionalKeywords = [
'exchange', 'binance', 'coinbase', 'kraken', 'okex', 'huobi',
'uniswap', 'pancakeswap', 'sushiswap',
'treasury', 'foundation', 'team', 'dev',
'vault', 'pool', 'contract', 'router'
];
const lowerLabel = label.toLowerCase();
return institutionalKeywords.some(keyword => lowerLabel.includes(keyword));
}
// Filtering conditions for (smart money candidates)
const isRetail = (
// Main condition: holding ratio less than 5% (lowered from 10% standard, exclude project parties and whales)
item.percentage_relative_to_total_supply < 5 &&
// Auxiliary condition: exclude known institutional addresses
(item.owner_address_label === null ||
!isInstitutionalLabel(item.owner_address_label)) &&
// Auxiliary condition: fund requirement (greater than $1 million)
parseFloat(item.usd_value) > 1000000
);
For filtered addresses, query their complete ERC20 holding situations one by one. Loop processing is used here for convenience.
Batch processing size set to {{$input.all().length}}, which can process all addresses at once.
Add HTTP request nodes inside the loop:
- Request method: GET
- URL: Moralis ERC20 query interface with dynamic parameter {{$json.owner_address}}
- Each loop automatically replaces with the current wallet address being processed
- Query parameters: chain set to bsc, limit to 100
This process completely automates the author’s most time-consuming part. Previously needed to copy addresses to Debank one by one to view holdings, now the system can complete several hours of work in just a few minutes.

Based on token security scores and holding concentration, divide into three categories:
// High security score value coins (security score ≥90 and verified)
const highSecurityTokens = filteredTokens
.filter(token =>
token.security_score >= 90 &&
token.verified_contract
);
// Large holding potential coins (holding ratio >0.1% and unscored or low-scored)
const bigHoldingTokens = filteredTokens
.filter(token =>
token.percentage_relative_to_total_supply > 0.001 &&
(token.security_score === null || token.security_score < 80)
);
// Medium risk opportunity coins (security score 60-85 and verified)
const mediumRiskTokens = filteredTokens
.filter(token =>
token.security_score >= 60 &&
token.security_score <= 85 &&
token.verified_contract
);
This is the most critical step in the entire process. After getting all smart money holding classification data, need to count the frequency of various tokens appearing in different wallets.
Imagine if we filtered out 50 smart money addresses, 30 of them hold BTC, 20 hold CAKE, then obviously BTC has higher “consensus,” worth focusing on.
// Count frequencies for all three categories
['highSecurityTokens', 'bigHoldingTokens', 'mediumRiskTokens'].forEach(category => {
const counts = {};
// Traverse all wallets, count each token's appearance
inputdata.forEach(item =>
item[category]?.forEach(token => counts[token] = (counts[token] || 0) + 1)
);
// Sort by frequency descending, take top 5 most popular
result[category] = Object.entries(counts)
.sort((a, b) => b[1] - a[1])
.slice(0, 5)
.map(([token, count]) => ({ token, count }));
});
The value of this step: - Transform scattered holding data into ordered popularity rankings - Find projects most recognized by smart money through “voting mechanism” - Provide quantitative reference for subsequent AI analysis
The completed statistical analysis data is input into the AI agent, and according to the Prompt requirements, the system will automatically generate a Telegram HTML format report, including:
= Based on "smart money" analysis of specific ERC20 token holders on BSC chain, discover the next potential targets by analyzing the investment portfolios of early holders in high-quality projects.
Collected data: {{ $json.result.toJsonString()}}
Analysis Background
Discover smart money deployment patterns through analyzing successful project holders' investment portfolios:
Screening Criteria - Holdings above $1M USD, excluding project treasury (≥10%), exchange addresses, Safe/Treasury wallets
Investment Logic - These smart money investors can usually identify quality projects early, their other holdings are likely the next opportunities
Risk Classification - Categorize based on security scores and holding concentration, balancing returns with risks
Data Structure Explanation
highSecurityTokens: High security projects (score ≥90 and verified) - Core long-term holding candidates
bigHoldingTokens: Large concentrated holdings (holding ratio >0.1% and score <80) - Smart money heavy bet targets
mediumRiskTokens: Balanced risk projects (score 60-85 and verified) - Diversified allocation choices
Analysis Requirements
Search Latest News: Focus on token project progress, ecosystem development, partnerships
Smart Money Logic: Analyze why these successful investors would choose these targets
Market Timing: Judge whether current timing is suitable for entry
Portfolio Recommendations: Provide specific position allocation suggestions
Output Format Requirements
Use Telegram HTML format, strictly follow the template below:
<b>🎯 Smart Money Investment Portfolio Analysis Report</b>
<b>💎 Core Long-term Holdings</b> (High Security - Recommended <code>30-40%</code> position)
<pre>Token Count Smart Money Selection Logic Recommended Action
TOKEN XX times Core value analysis Buy/Watch</pre>
<b>🚀 Heavy Bet Targets</b> (Big Holdings - Recommended <code>10-15%</code> position)
<pre>Token Count Concentration Betting Rationale Risk Warning
TOKEN XX times High/Medium Breakout potential analysis Specific risk points</pre>
<b>⚖️ Diversified Allocation Choices</b> (Medium Risk - Recommended <code>10-20%</code> position)
<pre>Token Count Risk Level Allocation Logic
TOKEN XX times Medium Risk Balanced return reasoning</pre>
<blockquote><b>⚠️ Risk Warning</b>
Following smart money does not guarantee profits. Decisions should be made based on personal risk tolerance and market conditions. Avoid over-concentrated positions as recommended, since this is already based on wallet screening related to target tokens.</blockquote>
<i>Data Source: Real-time BSC on-chain holding data</i>
Strict Formatting Requirements:
Every <b> tag must have a corresponding </b>
Every <code> tag must have a corresponding </code>
Every <pre> tag must have a corresponding </pre>
<blockquote> tag must have a corresponding </blockquote>
<i> tag must have a corresponding </i>
Token addresses use <code>address</code> format
Links use <a href="URL">text</a> format
Each category will display token occurrence frequency and provide specific investment recommendations and risk warnings combined with the latest market information. The report is directly pushed to the Telegram channel for convenient viewing anytime.
Note: For clearer logical explanation, the code in this article is a simplified version. The complete code can be referenced through the strategy link at the end of the article.
After building the tool, I tested it several times with good results:

Advantages: - Reduced from half-day manual analysis to automatic completion in minutes - More accurate data, avoiding manual statistical errors - Can analyze multiple projects simultaneously, greatly improving efficiency - AI analysis makes results more valuable for guidance
Problems Encountered: - API call limitations, need to control request frequency - Some address label recognition not accurate enough, still needs manual judgment - Market changes too fast, tools can only provide reference, cannot be completely relied upon
After using it for a while, I found this tool’s greatest value isn’t directly telling you what to buy, but helping you quickly narrow the focus range. Filtering out dozens of targets worth studying from thousands of tokens is already very valuable.
Future Improvement Plans: - Add support for more chains, not just BSC - Optimize address label recognition logic - Add price change monitoring to timely discover anomalies, easiest to implement combined with Inventor Platform - Increase risk assessment indicators
The strategy source code is provided at the end of the article for workflow setup:
1.Click to copy the source code 2.Configure relevant API keys and environment variables 3.Set the contractAddress parameter to the token address to be analyzed
Required Credentials: - Get top 100 holders HTTP node: Moralis API - Get smart money holdings HTTP node: Moralis API - AI intelligent analysis: Chat Model credentials - Telegram push: Telegram account
Strategy Address: https://www.fmz.com/strategy/509981