Analyst Price Targets
curl --request GET \
--url https://stocks-dev.up.railway.app/api/v1/fmp/stock/{symbol}/price-targetsimport requests
url = "https://stocks-dev.up.railway.app/api/v1/fmp/stock/{symbol}/price-targets"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://stocks-dev.up.railway.app/api/v1/fmp/stock/{symbol}/price-targets', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://stocks-dev.up.railway.app/api/v1/fmp/stock/{symbol}/price-targets",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://stocks-dev.up.railway.app/api/v1/fmp/stock/{symbol}/price-targets"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://stocks-dev.up.railway.app/api/v1/fmp/stock/{symbol}/price-targets")
.asString();require 'uri'
require 'net/http'
url = URI("https://stocks-dev.up.railway.app/api/v1/fmp/stock/{symbol}/price-targets")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"symbol": "<string>",
"priceTargetAverage": 123,
"priceTargetHigh": 123,
"priceTargetLow": 123,
"priceTargetMedian": 123,
"numberOfAnalysts": 123,
"lastUpdated": "<string>",
"strongBuy": 123,
"buy": 123,
"hold": 123,
"sell": 123,
"strongSell": 123,
"consensusRating": "<string>",
"recentChanges": [
{
"analystName": "<string>",
"date": "<string>",
"previousTarget": 123,
"newTarget": 123,
"rating": "<string>",
"ratingChange": "<string>"
}
],
"source": "<string>",
"timestamp": "<string>"
}FMP Professional
Analyst Price Targets
Get analyst price target forecasts and recommendations
GET
/
api
/
v1
/
fmp
/
stock
/
{symbol}
/
price-targets
Analyst Price Targets
curl --request GET \
--url https://stocks-dev.up.railway.app/api/v1/fmp/stock/{symbol}/price-targetsimport requests
url = "https://stocks-dev.up.railway.app/api/v1/fmp/stock/{symbol}/price-targets"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://stocks-dev.up.railway.app/api/v1/fmp/stock/{symbol}/price-targets', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://stocks-dev.up.railway.app/api/v1/fmp/stock/{symbol}/price-targets",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://stocks-dev.up.railway.app/api/v1/fmp/stock/{symbol}/price-targets"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://stocks-dev.up.railway.app/api/v1/fmp/stock/{symbol}/price-targets")
.asString();require 'uri'
require 'net/http'
url = URI("https://stocks-dev.up.railway.app/api/v1/fmp/stock/{symbol}/price-targets")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"symbol": "<string>",
"priceTargetAverage": 123,
"priceTargetHigh": 123,
"priceTargetLow": 123,
"priceTargetMedian": 123,
"numberOfAnalysts": 123,
"lastUpdated": "<string>",
"strongBuy": 123,
"buy": 123,
"hold": 123,
"sell": 123,
"strongSell": 123,
"consensusRating": "<string>",
"recentChanges": [
{
"analystName": "<string>",
"date": "<string>",
"previousTarget": 123,
"newTarget": 123,
"rating": "<string>",
"ratingChange": "<string>"
}
],
"source": "<string>",
"timestamp": "<string>"
}Overview
Retrieve analyst price targets and recommendations for any publicly traded company. This endpoint provides professional analyst forecasts including target prices, ratings, and recent changes, helping investors understand Wall Street sentiment and potential price movements.Price targets represent analysts’ 12-month price forecasts based on fundamental analysis, valuation models, and market conditions. They provide insight into professional sentiment and potential upside/downside.
Parameters
string
required
Stock ticker symbol (e.g., AAPL, MSFT, GOOGL, TSLA)
Response
string
The stock ticker symbol
number
Average analyst price target
number
Highest analyst price target
number
Lowest analyst price target
number
Median analyst price target
number
Number of analysts providing targets
string
Date of last price target update
Recommendation Summary
number
Number of Strong Buy recommendations
number
Number of Buy recommendations
number
Number of Hold recommendations
number
Number of Sell recommendations
number
Number of Strong Sell recommendations
string
Overall consensus rating (Strong Buy, Buy, Hold, Sell, Strong Sell)
Recent Changes
array
string
Data source identifier (“FMP”)
string
ISO timestamp of the response
Examples
curl "https://stocks-dev.up.railway.app/api/v1/fmp/stock/AAPL/price-targets"
import requests
response = requests.get("https://stocks-dev.up.railway.app/api/v1/fmp/stock/AAPL/price-targets")
data = response.json()
symbol = data['symbol']
current_price = 201.08 # You'd get this from stock quote endpoint
avg_target = data['priceTargetAverage']
high_target = data['priceTargetHigh']
low_target = data['priceTargetLow']
num_analysts = data['numberOfAnalysts']
# Calculate potential upside/downside
upside = ((avg_target - current_price) / current_price) * 100
high_upside = ((high_target - current_price) / current_price) * 100
low_upside = ((low_target - current_price) / current_price) * 100
print(f"🎯 Analyst Price Targets for {symbol}")
print("=" * 50)
print(f"Current Price: ${current_price:.2f}")
print(f"Average Target: ${avg_target:.2f} ({upside:+.1f}%)")
print(f"Target Range: ${low_target:.2f} - ${high_target:.2f}")
print(f"Potential Range: {low_upside:+.1f}% to {high_upside:+.1f}%")
print(f"Analyst Coverage: {num_analysts} analysts")
print()
# Recommendation breakdown
total_recs = data['strongBuy'] + data['buy'] + data['hold'] + data['sell'] + data['strongSell']
print(f"📊 Recommendations ({total_recs} total):")
print(f" 🟢 Strong Buy: {data['strongBuy']} ({data['strongBuy']/total_recs*100:.0f}%)")
print(f" 🟢 Buy: {data['buy']} ({data['buy']/total_recs*100:.0f}%)")
print(f" 🟡 Hold: {data['hold']} ({data['hold']/total_recs*100:.0f}%)")
print(f" 🔴 Sell: {data['sell']} ({data['sell']/total_recs*100:.0f}%)")
print(f" 🔴 Strong Sell: {data['strongSell']} ({data['strongSell']/total_recs*100:.0f}%)")
print(f"Consensus: {data['consensusRating']}")
# Recent changes
if data.get('recentChanges'):
print(f"\n📈 Recent Changes ({len(data['recentChanges'])}):")
for change in data['recentChanges'][:3]: # Show top 3
print(f" {change['date']}: {change['analystName']}")
print(f" Target: ${change['previousTarget']:.2f} → ${change['newTarget']:.2f}")
print(f" Rating: {change['rating']} ({change['ratingChange']})")
const response = await fetch('https://stocks-dev.up.railway.app/api/v1/fmp/stock/AAPL/price-targets');
const data = await response.json();
const symbol = data.symbol;
const currentPrice = 201.08; // You'd get this from stock quote endpoint
const avgTarget = data.priceTargetAverage;
const highTarget = data.priceTargetHigh;
const lowTarget = data.priceTargetLow;
const numAnalysts = data.numberOfAnalysts;
// Calculate potential upside/downside
const upside = ((avgTarget - currentPrice) / currentPrice) * 100;
const highUpside = ((highTarget - currentPrice) / currentPrice) * 100;
const lowUpside = ((lowTarget - currentPrice) / currentPrice) * 100;
console.log(`🎯 Analyst Price Targets for ${symbol}`);
console.log("=".repeat(50));
console.log(`Current Price: $${currentPrice.toFixed(2)}`);
console.log(`Average Target: $${avgTarget.toFixed(2)} (${upside >= 0 ? '+' : ''}${upside.toFixed(1)}%)`);
console.log(`Target Range: $${lowTarget.toFixed(2)} - $${highTarget.toFixed(2)}`);
console.log(`Potential Range: ${lowUpside >= 0 ? '+' : ''}${lowUpside.toFixed(1)}% to ${highUpside >= 0 ? '+' : ''}${highUpside.toFixed(1)}%`);
console.log(`Analyst Coverage: ${numAnalysts} analysts`);
console.log();
// Recommendation breakdown
const totalRecs = data.strongBuy + data.buy + data.hold + data.sell + data.strongSell;
console.log(`📊 Recommendations (${totalRecs} total):`);
console.log(` 🟢 Strong Buy: ${data.strongBuy} (${Math.round(data.strongBuy/totalRecs*100)}%)`);
console.log(` 🟢 Buy: ${data.buy} (${Math.round(data.buy/totalRecs*100)}%)`);
console.log(` 🟡 Hold: ${data.hold} (${Math.round(data.hold/totalRecs*100)}%)`);
console.log(` 🔴 Sell: ${data.sell} (${Math.round(data.sell/totalRecs*100)}%)`);
console.log(` 🔴 Strong Sell: ${data.strongSell} (${Math.round(data.strongSell/totalRecs*100)}%)`);
console.log(`Consensus: ${data.consensusRating}`);
<?php
$response = file_get_contents('https://stocks-dev.up.railway.app/api/v1/fmp/stock/AAPL/price-targets');
$data = json_decode($response, true);
$symbol = $data['symbol'];
$current_price = 201.08; // You'd get this from stock quote endpoint
$avg_target = $data['priceTargetAverage'];
$high_target = $data['priceTargetHigh'];
$low_target = $data['priceTargetLow'];
$num_analysts = $data['numberOfAnalysts'];
// Calculate potential upside/downside
$upside = (($avg_target - $current_price) / $current_price) * 100;
$high_upside = (($high_target - $current_price) / $current_price) * 100;
$low_upside = (($low_target - $current_price) / $current_price) * 100;
echo "🎯 Analyst Price Targets for $symbol\n";
echo str_repeat("=", 50) . "\n";
echo "Current Price: $" . number_format($current_price, 2) . "\n";
echo "Average Target: $" . number_format($avg_target, 2) . " (" . sprintf("%+.1f", $upside) . "%)\n";
echo "Target Range: $" . number_format($low_target, 2) . " - $" . number_format($high_target, 2) . "\n";
echo "Analyst Coverage: $num_analysts analysts\n\n";
// Recommendation breakdown
$total_recs = $data['strongBuy'] + $data['buy'] + $data['hold'] + $data['sell'] + $data['strongSell'];
echo "📊 Recommendations ($total_recs total):\n";
echo " 🟢 Strong Buy: " . $data['strongBuy'] . " (" . round($data['strongBuy']/$total_recs*100) . "%)\n";
echo " 🟢 Buy: " . $data['buy'] . " (" . round($data['buy']/$total_recs*100) . "%)\n";
echo " 🟡 Hold: " . $data['hold'] . " (" . round($data['hold']/$total_recs*100) . "%)\n";
echo "Consensus: " . $data['consensusRating'] . "\n";
?>
Response Example
{
"symbol": "AAPL",
"priceTargetAverage": 225.50,
"priceTargetHigh": 275.00,
"priceTargetLow": 180.00,
"priceTargetMedian": 220.00,
"numberOfAnalysts": 32,
"lastUpdated": "2025-06-28",
"strongBuy": 8,
"buy": 18,
"hold": 5,
"sell": 1,
"strongSell": 0,
"consensusRating": "Buy",
"recentChanges": [
{
"analystName": "Morgan Stanley",
"date": "2025-06-25",
"previousTarget": 210.00,
"newTarget": 230.00,
"rating": "Overweight",
"ratingChange": "Upgrade"
},
{
"analystName": "Goldman Sachs",
"date": "2025-06-20",
"previousTarget": 240.00,
"newTarget": 260.00,
"rating": "Buy",
"ratingChange": "Maintain"
}
],
"source": "FMP",
"timestamp": "2025-06-28T20:30:15.123456"
}
Understanding Price Targets
Price Target Methodology
Price Target Methodology
How Analysts Set Targets:
- Valuation Models: DCF, P/E multiples, sum-of-parts analysis
- Time Horizon: Typically 12-month forward-looking targets
- Risk Assessment: Consider company-specific and market risks
- Peer Comparison: Relative valuation vs industry peers
Recommendation Ratings
Recommendation Ratings
- Strong Buy/Buy: Analyst expects significant outperformance
- Hold: Expected to perform in line with market
- Sell/Strong Sell: Expected underperformance (rare)
- Consensus: Weighted average of all recommendations
Target Accuracy
Target Accuracy
- Historical Performance: Analysts achieve ~40-60% accuracy
- Bias Factors: Tend to be optimistic, slow to downgrade
- Market Conditions: Accuracy varies with market volatility
- Coverage Quality: More analysts generally means better consensus
Use Cases
Investment Decisions
Buy/Sell Signals
- Compare current price to targets
- Assess risk/reward ratios
- Time entry/exit points
Portfolio Management
Position Sizing
- Upside potential analysis
- Risk assessment
- Diversification decisions
Research & Analysis
Due Diligence
- Consensus sentiment tracking
- Analyst revision trends
- Peer comparison
Risk Management
Downside Protection
- Identify potential risks
- Stop-loss level setting
- Volatility expectations
Target Analysis Tips
Strong Consensus Indicators:
- 20+ analysts covering the stock
- Narrow price target range
- Recent target increases
- High percentage of Buy ratings
Investment Strategies:
- Look for stocks trading below average targets
- Monitor target revision trends
- Consider consensus rating changes
- Compare targets to technical levels
Important Considerations:
- Price targets are opinions, not guarantees
- Analyst biases and conflicts of interest
- Market conditions can change rapidly
- Use targets as one of many analysis tools
Error Responses
Invalid Symbol (404)
Invalid Symbol (404)
{
"error": "404: Failed to fetch price targets for INVALID"
}
No Coverage (404)
No Coverage (404)
{
"error": "No analyst coverage available",
"detail": "This stock is not covered by professional analysts"
}
Rate Limited (429)
Rate Limited (429)
{
"error": "Rate limit exceeded",
"detail": "FMP API limit reached. Please upgrade plan or try again later."
}
MCP Protocol Usage
For AI agents using the Model Context Protocol:{
"method": "tools/call",
"params": {
"name": "fmp_get_price_targets",
"arguments": {
"symbol": "AAPL"
}
}
}
Related Endpoints
Analyst Estimates
Get earnings and revenue forecasts
Stock Quote
Get current market price for comparison
Upgrades/Downgrades
Get recent rating changes
Stock Recommendations
Get recommendation summaries