I'm trying to get the historical P/E ratio for a number of securities.

WolframAlpha makes this seem easy: WolframAlphaInput

However, when I try to obtain a subset (or even just a single value) of this information in Mathematica I run into problems. MathematicaOutput

What's going on? I think I'm using the function properly. In the documentation center it specifics the following syntax:


What's going wrong?

UPDATE: I have been able to obtain some of the information using Mathematica, but not in the form of a function. workingISh

  • $\begingroup$ You are right that FInancialData doesn't seem to have that information. I guess Wolfram Alpha is gathering data from a different source. $\endgroup$
    – MarcoB
    Jul 7, 2016 at 20:25
  • $\begingroup$ @MarcoB Is there a way to quickly use Wolfram Alpha hundreds of times? $\endgroup$
    – wizlog
    Jul 7, 2016 at 20:29
  • $\begingroup$ I suspect not, since it relies on a network connection with its innate lag, but I am not really an expert in using Wolfram Alpha at all, so perhaps others will chime in. Is the data available through any other database? It may be easier to harvest it elsewhere. $\endgroup$
    – MarcoB
    Jul 7, 2016 at 20:31
  • $\begingroup$ To those who may chime in, I'm okay with significant lag, I only need to do this once (with a few thousand iterations). $\endgroup$
    – wizlog
    Jul 7, 2016 at 20:32
  • 1
    $\begingroup$ If you can find a machine with both a Mathematica license and a Bloomberg license, you will appreciate the WSTP interface at github.com/MichaelSternNYC/bloomberg-to-mathematica. It moves any data accessible via the Bloomberg API into Mathematica, which would include P/E ratios from several sources going back many, many years. $\endgroup$ Jul 7, 2016 at 22:09

1 Answer 1


So the data you want is here:

WolframAlpha["p/e msft 1/3/2000 to 6/1/2000"]

Mathematica graphics

How can it be accessed? Assuming you want the data from the plot, you need to see what the name of the pod you are interested is,

WolframAlpha["p/e msft 1/3/2000 to 6/1/2000", "PodIDs"]
(* {"Input", "Result", "DateRangeSpecified:PriceEarningsRatio:FinancialData"} *)

That last one is what we are looking for, so we look a little deeper

WolframAlpha["p/e msft 1/3/2000 to 6/1/2000", {"DateRangeSpecified:PriceEarningsRatio:FinancialData"}]

Mathematica graphics

That one labeled "TimeSeriesData" looks intersting,

`WolframAlpha["p/e msft 1/3/2000 to 6/1/2000", 

enter image description here

Bingo! That's what you need,

data = {{"DateRangeSpecified:PriceEarningsRatio:FinancialData", 1}, 
    "TimeSeriesData"} /. 
    "p/e msft 1/3/2000 to 6/1/2000", \


Mathematica graphics

This method is not foolproof - it seems that you can't enter a time period over a certain length and still get a "TimeSeries" result, so toy around with it. For example, the string "p/e msft 1/3/1990 to 6/1/1991" gives a result but "p/e msft 1/3/1990 to 6/1/1992" does not. Also, try adding TimeConstrained -> 120 as an option to WolframAlpha to avoid timeouts.

  • $\begingroup$ Thank you @JasonB VERY much. How could I modify for, say the market capitalization (either for one specific date or a date range)? How did you know that "DateRangeSpecified:PriceEarningsRatio:FinancialData" was a valid? $\endgroup$
    – wizlog
    Jul 8, 2016 at 20:02
  • $\begingroup$ I tried to show the process that lead to knowing the name of the pod. Look at the result of WolframAlpha["market capitalization msft 1/3/2000 to 6/1/2000", "PodIDs"] and it should be clear what the correct string is $\endgroup$
    – Jason B.
    Jul 8, 2016 at 20:08
  • $\begingroup$ a lesson in reading the whole answer twice has been learned. Thank you for providing such a through step by step guide. $\endgroup$
    – wizlog
    Jul 8, 2016 at 20:12

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.